搭建数字证书实验环境

2020-04-22  本文已影响0人  louyang

实验机器 Cent OS 8 和 OpenSSL 1.1.1c

$ cat /etc/centos-release
CentOS Linux release 8.0.1905 (Core)

$ openssl version
OpenSSL 1.1.1c FIPS  28 May 2019

用OpenSSL搭建实验CA,需要预先创建如下目录结构:

$ mkdir -p my-ca/{certs,crl,newcerts,private} && cd my-ca 
$ cp /etc/pki/tls/openssl.cnf . 
$ touch index.txt 
$ echo '01' > serial 
$ vi openssl.cnf 
    [ CA_default ] 
    dir     = .    # <-- change this 
    private_key = $dir/cakey.pem     # <-- change this 

看一下真实的CA:
https://www.datanyze.com/market-share/ssl--21/China

创建实验CA密钥对和证书:

$ openssl genrsa -out cakey.pem 4096    // 创建密钥对
$ openssl rsa -in cakey.pem -text -noout    // 看一下密钥对的内容
$ openssl rsa -in cakey.pem -pubout > cakey.pub.pem    // 可选,导出公钥
$ openssl rsa -pubin -in cakey.pub.pem -text -noout    // 可选,看一下公钥的内容

穿插一个知识点,

image.png

n就是openssl命令输出中的modulus,所以n,e构成公钥,n,d构成私钥;其他参数如prime1,2据说是提高解密效率的。

另外,通过浏览器可以看到浏览网站的证书,重点关注一下subject和public key这两个内容。

$ openssl req -new -x509 -key cakey.pem -out cacert.pem    // 创建实验CA证书
    Country Name (2 letter code) [XX]:CN 
    State or Province Name (full name) []:Zhejiang 
    Locality Name (eg, city) [Default City]:Hangzhou 
    Organization Name (eg, company) [Default Company Ltd]:MY CA 
    Organizational Unit Name (eg, section) []: 
    Common Name (eg, your name or your server's hostname) []:www.my-ca.org 
    Email Address []:admin@my-ca.org 
$ openssl x509 -in cacert.pem -text -noout    // 看一下内容
$ cat cacert.pem    // pem文件的内容,放到windows上,后缀名为crt
copy and paste content of cacert.pem into windows file cacert.crt
$ double click cacert.crt    // 在windows上打开证书,看内容

如果要拉长证书的有效期,可以用-days 3650,3650表示10年。

创建实验网站的密钥对,和证书签名请求:

$ openssl genrsa -out private/my-web.key 2048    // 生成实验网站的密钥对
$ openssl req -new -key private/my-web.key -out newcerts/my-web.csr    // 生成实验网站的证书签名请求
    Country Name (2 letter code) [XX]:CN 
    State or Province Name (full name) []:Zhejiang 
    Locality Name (eg, city) [Default City]:Hangzhou 
    Organization Name (eg, company) [Default Company Ltd]:MY WEB 
    Organizational Unit Name (eg, section) []: 
    Common Name (eg, your name or your server's hostname) []:www.my-web.com 
    Email Address []:admin@my-web.com 
$ openssl req -in newcerts/my-web.csr -text -noout    // 看一下证书内容
  openssl rsa -in private/my-web.key -pubout > my-web.pub    // 从密钥对中导出公钥
  openssl rsa -pubin -in my-web.pub -text -noout    // 显示公钥内容,和证书中显示的公钥内容应该一致

用实验CA的证书,完成签名:

$ openssl ca -config openssl.cnf -policy policy_anything -out certs/my-web.pem  -infiles newcerts/my-web.csr    // 完成CA签名
$ openssl x509 -in certs/my-web.pem -text -noout    // 显示CA签名后的证书内容

参考

OpenSSL Certification Authority (CA) on Ubuntu Server
https://kupczynski.info/2013/04/21/creating-your-own-certificates.html

上一篇下一篇

猜你喜欢

热点阅读