OpenSSL 生成CA证书和自签名证书
一、安装OpenSSL工具
CentOS/RHEL系统:
yum install openssl openssl-devel
Ubuntu/Debian系统:
sudo apt-update
sudo apt-get install openssl libssl-dev
二、制作证书
证书相关名词解释:
- CA:Certification Authority,翻译为证书机构,负责给各个网站颁发证书。(每个电脑都会内置13个根证书机构的证书,并无条件相信这13个证书机构)
- CSR:Certificate Signing Request,即证书签名请求。用户向ca申请证书的时候,需要提交的信息。一般会包含网站域名、用户邮箱、所在国家地区、组织名称等等信息
- 申请证书,或者签发证书,即ca首先使用特定的摘要算法计算出csr的摘要,再用自己的私钥给摘要进行加密后得到的签名,最后将以上所有信息打包为一个特定格式的文件(也就是证书)
- cert:Certificate,即证书。一个特定格式的文件,里面包含了csr中部分信息、摘要生成算法、tls拓展支持、ca给csr的指纹信息(也翻译为签名)等。
- key:一般指openssl生成的密钥文件,其中包含了公钥和私钥。
- 验证证书合法:指客户端首先从cert中读取该证书的签发ca(这里会涉及到证书链的问题,暂时可简单理解为,所有证书都是根证书机构签发),然后使用该ca的公钥去解密证书的签名(非对称加密,私钥加密,公钥解密),获得摘要信息A;然后使用证书中指定的摘要算法计算证书的摘要B;第三步判摘要A是否和摘要B相等。
- tls单向认证:一般指客户端会验证服务端所提供的证书是否合法(访问https的网页就是用的这个,用的很广泛)。
- tls双向认证:在单项认证基础上,服务端也会验证客户端的证书是否合法(相对少见,目前只有docker daemon开启tls后才会使用)。
2.1、生成CA证书
(1)创建证书索引文件和序列号文件
因后面生成证书时使用到了openssl配置文件/etc/pki/tls/openssl.cnf,所以要提前创建,如果不使用
-config /etc/pki/tls/openssl.cnf
选项,可以不用此步。
touch /etc/pki/CA/index.txt
echo "00" > /etc/pki/CA/serial
(2)生成私钥
openssl genrsa -des3 -out rootCA.key 2048
(3)生成CA证书
openssl req -x509 -sha256 -new -nodes -key rootCA.key -days 3650 -out rootCA.crt -subj "/C=cn/ST=gd/L=sz/O=hw/OU=hc/CN=rootCA" -config /etc/pki/tls/openssl.cnf
C=单位的两字母国家代码
ST=州或省份名称
L=城市或区域名称
O=组织名称
OU=组织单位名称
CN=域名或者名字与姓氏
2.2、生成服务端证书
(1)生成私钥
openssl genrsa -out server.key 2048
(2)生成证书请求(CSR)
openssl req -new -key server.key -out server.csr -subj "/C=cn/ST=gd/L=sz/O=hw/OU=hc/CN=192.168.3.3" -config /etc/pki/tls/openssl.cnf
国家(C)、省份(ST)、组织(O)必需和CA证书里的相同,不然后面签发会报错。
(3)签发证书
方式一(openssl x509命令签发,不使用配置文件/etc/pki/tls/openssl.cnf):
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -in server.csr -out server.crt -days 3650
openssl x509命令具以下的一些功能,例如输出证书信息,签署证书请求文件、生成自签名证书、转换证书格式等。openssl x509工具不会使用openssl配置文件中的设定,而是完全需要自行设定或者使用该伪命令的默认值,它就像是一个完整的小型的CA工具箱。
方式二(openssl ca命令签发 使用配置文件/etc/pki/tls/openssl.cnf):
openssl ca -cert rootCA.crt -keyfile rootCA.key -in server.csr -out server.crt -days 3650 -config /etc/pki/tls/openssl.cnf
(4)查看证书相关命令
#查看证书信息
openssl x509 -in server.crt -noout -text
#查看证书subject和issuer信息
openssl x509 -in server.crt -noout -subject -issuer
#验证证书状态是否正常
openssl verify -CAfile rootCA.crt user01.crt
2.3、生成客户端证书
(1)生成私钥
openssl genrsa -out client.key 2048
(2)生成证书请求(CSR)
openssl req -new -key client.key -out client.csr -subj "/C=cn/ST=gd/L=sz/O=hw/OU=hc/CN=test" -config /etc/pki/tls/openssl.cnf
(3)签发证书
方式一(openssl x509命令签发,不使用配置文件/etc/pki/tls/openssl.cnf):
openssl x509 -req -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -in client.csr -out client.crt -days 3650
方式二(openssl ca命令签发 使用配置文件/etc/pki/tls/openssl.cnf):
openssl ca -cert rootCA.crt -keyfile rootCA.key -in client.csr -out client.crt -days 3650 -config /etc/pki/tls/openssl.cnf
2.4、吊销证书
吊销证书需要使用默认的配置文件/etc/pki/tls/openssl.cnf,当然也可以复制一份openssl.cnf文件,自己改一下配置也可。这里使用默认的配置文件/etc/pki/tls/openssl.cnf。
(1)创建crlnumber文件
echo "00" > /etc/pki/CA/crlnumber
(2)生成CRL
openssl ca -gencrl -cert rootCA.crt -keyfile rootCA.key -out rootCA.crl -config /etc/pki/tls/openssl.cnf
(3)吊销证书
openssl ca -cert rootCA.crt -keyfile rootCA.key -revoke user01.crt -config /etc/pki/tls/openssl.cnf
(4)更新CRL
openssl ca -gencrl -cert rootCA.crt -keyfile rootCA.key -out rootCA.crl -config /etc/pki/tls/openssl.cnf
(5)查看CRL信息,可以看到吊销的证书信息
openssl crl -in rootCA.crl -noout -text
参考文档:
https://www.cnblogs.com/qiuhom-1874/p/12237944.html
https://www.cnblogs.com/even160941/p/16068449.html
https://blog.csdn.net/chenhao0568/article/details/137881528
https://blog.csdn.net/weixin_45895555/article/details/110939429
https://blog.csdn.net/abccheng/article/details/82697237
https://www.cnblogs.com/zhanglianghhh/p/13800490.html