分步来看看自建证书的过程
1、自建CA
2、自签名SSL证书两部分:
自建CA:这里的CA其实指的是创建自己的CA根证书,这样可以给其他人签署证书,但是这个CA根证书是你自己创建的,没有得到互联网的承认,也不会被正规CA认可,所以不具备通用和有效性,一般可以在内部网络使用。
自签名SSL证书:自签证书,就是自己给自己签署生成一份CA证书,或者用自建的CA根证书来签发的SSL证书,同样不具备互联网的通用和有效性,一般只用于测试环境或内部网络。
一、自建CA私钥
openssl genrsa -des3 -out selfca.key 2048
这条命令使用 OpenSSL 工具生成一个带有Triple-DES(3DES)加密的密码保护的2048位RSA私钥文件,各个参数的含义如下:
openssl: OpenSSL 工具的命令行执行器。
genrsa: 生成RSA密钥的命令。
-des3: 使用Triple-DES算法对生成的私钥进行加密,这会在生成私钥时要求你设置一个密码,以便在每次使用私钥时都需要提供密码。
-out selfca.key: 指定生成的私钥的输出文件名为 selfca.key,私钥文件将被保存在当前工作目录中。
2048: 指定生成的RSA私钥的位数为2048位,这是一种常见的安全密钥长度。
运行命令后需要输入一个自定义密码两次,以后每次使用这个私钥都要输入密码,但是在很多文章中你会发现他们有一步是要删除密码,原因是在一些自动化部署场景中,去掉私钥密码可以避免手动输入密码,使整个过程更加自动化,比如配置到Apache或者Nginx中时不必每次启动时输入密码,所以我们在后面生成服务器私钥时就不使用密码了。
二、生成CA自签名证书
openssl req -new -x509 -days 3650 -key selfca.key -subj "/C=CN/ST=GD/L=GZ/O=CZSCGJCA/OU=CGJCA/CN=CA" -out selfca.crt
这条命令使用 OpenSSL 工具生成自签名根证书(Root Certificate),各个参数的含义如下:
openssl req: 这是 OpenSSL 工具中用于处理证书签署请求(CSR)的命令。
-new: 表示创建新的 CSR。
-x509: 表示生成自签名的 X.509 证书,而不是生成 CSR。
-days 3650: 设置证书的有效期为 3650 天(10 年)。
-key selfca.key: 指定用于生成证书的私钥文件为 selfca.key。
-subj “/C=CN/ST=BJ/L=BJ/O=MyRootCA/OU=MyCA/CN=CA”: 设置证书主题(Subject)的信息。这里使用了简化的 Distinguished Name
(DN),包括了国家(C=CN)、省/州(ST=BJ)、城市(L=BJ)、组织(O=MyRootCA)、组织单位(OU=MyCA)、通用名称(CN=CA)等信息。-out selfca.crt: 指定生成的证书文件的输出路径和文件名,这里为 selfca.crt。
我们就生成了一个自签名的CA根证书,如果把它加入到操作系统或浏览器的信任列表中,那么之后由他签发的SSL证书都可以被信任了,接下来我们开始用它来签发SSL证书。
三、自签名SSL证书
这个过程主要包括生成服务器密钥、构建签名请求和用CA签名证书三部分,其中前两步可以合并为一步:
生成服务器私钥和证书申请文件CRS
openssl req -newkey rsa:2048 -nodes -keyout server.key -subj "/C=CN/ST=GD/L=GZ/O=CZSCGJServer/OU=CZSCGJServer/CN=10.10.10.10" -out server.csr
这条命令使用 OpenSSL 工具生成证书签署请求(CSR),各个参数的含义如下:
openssl req: 这是 OpenSSL 工具中用于处理证书签署请求(CSR)的命令。
-newkey rsa:2048: 创建一个新的 RSA 密钥对,其中包括一个 2048 位的 RSA 私钥和相应的公钥。
-nodes: 生成的私钥不使用密码进行加密。这意味着私钥文件 server.key 将不需要密码才能访问。
-keyout server.key: 指定生成的私钥文件的输出路径和文件名,这里为 server.key。
-subj “/C=CN/ST=BJ/L=BJ/O=MyRootServer/OU=MyServer/CN=10.10.10.10"”: 设置证书主题(Subject)的信息。这里使用了简化的 Distinguished Name
(DN),包括了国家(C=CN)、省/州(ST=BJ)、城市(L=BJ)、组织(O=MyRootServer)、组织单位(OU=MyServer)、通用名称(CN=10.10.10.10")等信息。通用名称(CN)通常用于指定服务器的主机名或
IP 地址。-out server.csr: 指定生成的证书签署请求文件的输出路径和文件名,这里为 server.csr。
四、使用CA根证书签名SSL证书
openssl x509 -req -extfile <(printf "subjectAltName=IP:10.10.10.10"") -days 3650 -in server.csr -CA selfca.crt -CAkey selfca.key -CAcreateserial -out server.crt
这条命令使用 OpenSSL 工具签署证书签署请求(CSR)并生成证书,并且带有SAN信息,各个参数的含义如下:
openssl x509: 这是 OpenSSL 工具中用于处理 X.509 证书的命令。
-req: 表示输入的文件是证书签署请求(CSR)。
-extfile <(printf “subjectAltName=IP:10.10.10.10”[,DNS:<YOUR_DOMAIN>,…]“):
使用扩展文件,该文件包含了额外的证书扩展信息。在这里,subjectAltName 扩展用于指定主体的备用名称(Subject
Alternative Name),这里指定了 IP 地址 10.10.10.10”。你也可以在方括号中添加其他主机名或 IP
地址,用逗号分隔。-days 3650: 设置生成的证书的有效期为 3650 天(10 年)。
-in server.csr: 指定输入的证书签署请求文件,这里为 server.csr。
-CA selfca.crt: 指定用于签署证书的 CA 证书文件,这里为 selfca.crt。
-CAkey selfca.key: 指定用于签署证书的 CA 私钥文件,这里为 selfca.key。
-CAcreateserial: 创建一个新的序列号文件,该文件用于跟踪 CA 签署的证书的唯一性。
-out server.crt: 指定生成的证书文件的输出路径和文件名,这里为 server.crt。
最终的文件列表
至此CA根证书和自签名SSL证书就生成好了,我们一共收获到了5个文件,作用分别如下:
selfca.key:CA私钥,用于后续签名SSL证书
selfca.crt:CA根证书,用于后续签名SSL证书,需要加入到操作系统或浏览器的信任列表中
server.key:服务器私钥,需要配置到https服务,比如Apache和Nginx配置文件中
server.csr:证书签署请求文件,后续没用了
server.crt:自签名SSL证书,需要配置到https服务,比如Apache和Nginx配置文件中,这就是代表服务器的身份证件
五、更新系统
查看nginx的配置文件,一般是 xx/nginx/conf下面的nginx.conf看看SSL配置文件在哪儿,把上面制作的server.crt文件和server.key文件更换到对应的目录。
**
备注:特别感谢:CSDN作者 AlbertS
博客链接:https://blog.csdn.net/albertsh/article/details/134724042
**