实验机器 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.pngn就是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
网友评论