返回顶部

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

https://www.jianshu.com/p/81dbcde4fd7c

https://zhuanlan.zhihu.com/p/687335362

posted @ 2024-07-18 17:10  hovin  阅读(3)  评论(0编辑  收藏  举报