openssl 生成自签名证书

1、openssl生成CA根证书

1.1、生成CA私钥

openssl genrsa -out root_ca.key 2048

注意: 私钥必须妥善保管,既不能丢失,也不能泄露。如果发生丢失和泄露,必须马上重新

生成,以使旧的证书失效。

1.2、通过ca私钥生成pem格式的ca根证书

openssl req -x509 -new -nodes -key root_ca.key -sha256 -days 36500 -out root_ca.pem

接下来需要填写:

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:ShannXi

Locality Name (eg, city) [Default City]:XiAn

Organization Name (eg, company) [Default Company Ltd]:xxx

Organizational Unit Name (eg, section) []:Test

Common Name (eg, your name or your server's hostname) []:xxx

Email Address []:

注意: '-days 36500'代表生成的根证书的有效期为36500天,下面的参数根据实际填写即可。

2、用根证书签发server证书

2.1、生成服务端私钥:

openssl genrsa -out http_server.key 2048

2.2、新建server_req.conf文件:

req

default_bits = 2048

distinguished_name = req_distinguished_name

req_extensions = req_ext

x509_extensions = v3_req

prompt = no

req_distinguished_name

countryName = CN

stateOrProvinceName = ShannXi

localityName = XiAn

organizationName = xxx

commonName = *.xxx.com #修改 设备连接用的域名或ip

req_ext

subjectAltName = @alt_names

v3_req

subjectAltName = @alt_names

alt_names

IP.1 = 0.0.0.0

IP.2 = 127.0.0.1

IP.3 = xxxxx

IP.4 = xxxxx

DNS.1 = *.xxx.com

DNS.2 = localhost

注意:

1、alt_names里的IP列填设备要访问的服务端的IP地址。

2、alt_names里的DNS列填设备要访问的服务端的域名地址。

3、commonName 填设备要访问的服务端的IP或域名地址。

4、当客户端访问服务端的地址为IP地址,那么只会在x509的扩展项subjectAltName 中寻找IP进行 匹配,也就是到alt_names 里面的IP列去寻找IP进行匹配。

5、当客户端访问服务端的地址为域名地址,则除了在 subjectAltName 中寻找域名进行匹配(也就是到alt_names里面的DNS列去匹配)外,还会检查req_distinguished_name中的 commonName 是否和域名匹配。

2.3、生成证书签名请求:

openssl req -new -key ./http_server.key -config server_req.conf -out http_server.csr

2.4、生成最终服务端证书

用请求文件、根证书、私钥、server_req.conf,签发新的服务端证书:http_server.pem,

设置有效期为36500天。

openssl x509 -req -in ./http_server.csr -CA root_ca.pem -CAkey root_ca.key -CAcreateserial -out http_server.pem -days 36500 -sha256 -extensions v3_req -extfile server_req.conf

3、用根证给签发client证书

3.1生成客户端私钥

openssl genrsa -out xxxxx.key 2048

注意:文件名为:xxxxx。

3.2、生成客户端证书签名请

openssl req -new -key xxxxx.key -out xxxxx.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=Shanghai/CN=xxxxx"

注意:文件名、参数CN值,应该保持一致,都为xxxxx。

3.3、签发客户端证书

用证书请求文件、根证书、私钥,签发客户端证书:xxxxx.pem,设置有效期为36500天。文件名为:xxxxx。

openssl x509 -req -days 36500 -in xxxxx.csr -CA root_ca.pem -CAkey root_ca.key -CAcreateserial -out xxxxx.pem

4、当更换服务端的IP或者域名时

当迁移服务器,导致服务端IP变更,或者客户端访问服务端的域名发生变更时,我们该如何更换自签名证书?

4.1、当服务端的IP发生变更时:

只需要将新的IP 地址更新到server_req.conf 文件里alt_names 的IP列里面,然后用server_req.conf文件重新生成服务端证书签名请求,再重新生成服务端证书,用新证书替换原有的服务端旧证书,再重启ac-gateway-http服务,设备端不用变更证书,就可以直接访问新服务器了。

4.2、当服务端的域名发生变更时:

当服务端是以域名地址提供对外服务时,当域名地址变更时,我们除了要将新的域名地址更新到server_req.conf 文件里alt_names 的DNS列里面,还要将req_distinguished_name中的 commonName值更新成新的域名地址,然后用server_req.conf文件重新生成服务端证书签名请求,再重新生成服务端证书,用新证书替换原有的服务端旧证书,然后重启ac-gateway-http服务,设备端不用变更证书,就可以直接访问新服务器了。

相关推荐
默|笙44 分钟前
【Linux】线程互斥与同步_同步(2)_环形队列
linux·运维·服务器
cui_ruicheng1 小时前
Linux IO入门(一):从C语言IO到文件描述符
linux·运维·c语言
丸子家的银河龙1 小时前
yocto使用实例[1]-自定义内核配方
linux
Wenweno0o1 小时前
CC-Switch & Claude 基于 Linux 服务器安装使用指南
linux·服务器·claude code·cc-switch
2501_915921431 小时前
苹果iOS应用开发上架与推广完整教程
android·ios·小程序·https·uni-app·iphone·webview
Fanfanaas2 小时前
Linux 系统编程 进程篇(一)
linux·运维·服务器·c语言·开发语言·网络·学习
念恒123062 小时前
ROS2入门
linux·运维·服务器
小糖学代码2 小时前
LLM系列:1.python入门:6.元组型对象(tuple)
linux·运维·服务器·python
2501_915106322 小时前
HTTP和HTTPS协议工作原理及安全性全面解析
android·ios·小程序·https·uni-app·iphone·webview
云淡风轻~窗明几净2 小时前
ubuntu的lazarus的Tline/TeaLine组件的构思
linux·数据库·ubuntu