使用OpenSSL生成根证书并自签署证书

生成根CA的私钥和证书

bash 复制代码
# 生成根 CA 的私钥
[root@developer ssl]# openssl genrsa -out rootCA.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
...+++++
............................................................+++++
e is 65537 (0x010001)

# 使用私钥生成根 CA 的证书
[root@developer ssl]# openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt
Country Name (2 letter code) [XX]:CN  # 国家名称(2个字母代码)
State or Province Name (full name) []:JS  # 州或省名
Locality Name (eg, city) [Default City]:KS  # 地点名称
Organization Name (eg, company) [Default Company Ltd]:local  # 组织名称
Organizational Unit Name (eg, section) []:developer  # 组织单位名称
Common Name (eg, your name or your server's hostname) []:Local Developer CA  # 通用名称
Email Address []:

为hello-world.test生成私钥和证书请求文件(CSR)

bash 复制代码
# 生成 hello-world.test 的私钥
[root@developer ssl]# openssl genrsa -out hello-world.test.key 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
..........................................................................+++++
.....+++++
e is 65537 (0x010001)

# 使用私钥生成证书请求文件
[root@developer ssl]# openssl req -new -key hello-world.test.key -out hello-world.test.csr
Country Name (2 letter code) [XX]:CN  # 国家名称(2个字母代码)
State or Province Name (full name) []:JS  # 州或省名
Locality Name (eg, city) [Default City]:KS  # 地点名称
Organization Name (eg, company) [Default Company Ltd]:local  # 组织名称
Organizational Unit Name (eg, section) []:developer  # 组织单位名称
Common Name (eg, your name or your server's hostname) []:*.hello-world.test  # 域名
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

创建证书扩展文件

为了确保为 hello-world.test 签名的证书能够用作服务器身份验证,需要为它创建一个扩展文件。创建一个名为 v3.ext 的文件,并添加以下内容:

复制代码
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.hello-world.test
# 如果是IP就使用 IP.1 = 你的IP地址

使用根 CA 的证书为 hello-world.test 签名证书

bash 复制代码
[root@developer ssl]# openssl x509 -req -in hello-world.test.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out hello-world.test.crt -days 500 -sha256  -extfile v3.ext
Signature ok
subject=C = CN, ST = JS, L = KS, O = local, OU = developer, CN = *.hello-world.test
Getting CA Private Key

此时文件夹内应该有以下文件:

bash 复制代码
[root@developer ssl]# ll
-rw-r--r--. 1 root root 1318 5月  23 09:59 rootCA.crt
-rw-------. 1 root root 1675 5月  23 09:59 rootCA.key
-rw-r--r--. 1 root root   41 5月  23 10:14 rootCA.srl
-rw-r--r--. 1 root root  253 5月  23 10:13 v3.ext
-rw-r--r--. 1 root root 1322 5月  23 10:14 hello-world.crt
-rw-r--r--. 1 root root  997 5月  23 10:02 hello-world.csr
-rw-------. 1 root root 1679 5月  23 10:00 hello-world.key

宝塔部署

宝塔网站设置中SSL选项选择当前证书,密钥(KEY)中填入hello-world.key的内容,证书(PEM格式)中填入hello-world.crt的内容,最后将rootCA.crt安装到电脑的本地受信任的根证书颁发机构中。

相关推荐
程序员mine16 天前
HTTPS-TLS加密与证书完全指南(中)
网络协议·https·ssl
开发者联盟league16 天前
pnpm install报错ERR_SSL_PACKET_LENGTH_TOO_LONG问题解决
网络·网络协议·ssl
北极熊~~16 天前
win上编译带ssl的paho-cpp库
mqtt·ssl·源码编译mqtt库
GlobalSign数字证书17 天前
SSL证书过期致业务宕机?企业证书管理三大痛点与自动化方案
网络协议·自动化·ssl
GlobalSign数字证书17 天前
Nginx配置SSL证书教程:从零到HTTPS的完整部署指南
nginx·https·ssl
疯狂的维修17 天前
博图不同版本下的OPC UA功能开启区别
服务器·https·ssl
master33617 天前
SSL 证书链问题导致微信小程序无法正常工作
网络协议·微信小程序·ssl
寒山李白18 天前
人工智能训练师报考指南
人工智能·ai·证书·职称·训练师
极创信息18 天前
信创产品适配测试认证,域名和SSL是必须的吗?
java·开发语言·网络·python·网络协议·ruby·ssl
吠品22 天前
一次 Nginx 报错 unexpected end of file 的排查记录
网络协议·https·ssl