背景
之前介绍过如何用OpenSSL创建自签名证书。但在给HTTP服务器(这里使用的是Nginx)配置证书时还是遇到了些问题,因此在这里总结一下配置过程以及问题的解决方法。
1. 生成网站使用的自签名证书
首先确保你的OpenSSL版本在1.1.1以上(用openssl version
命令查看)。Nginx配置TLS时同时需要私钥和证书。这里以henchat.net的自签名证书为例,介绍所需文件的制作过程:
1)生成私钥文件
openssl genrsa -out _.henchat.net.key 2048
2)用私钥文件生成证书文件
openssl req -new -x509 -days 3650 -key _.henchat.net.key -out _.henchat.net.crt \
> -subj "/C=国家/ST=城市/O=公司名/OU=部门/CN=*.henchat.net" \
> -addext "subjectAltName=DNS:*.henchat.net,DNS:henchat.net"
# 说明:这里生成的是通配符证书,即证书可以用于henchat.net和它的二级域名,如api.henchat.net。
# subjectAltName中必须同时包含主域名和通配符域名。
🤔可以使用OpenSSL 1.0.x吗?
似乎也不是不行,但1.0.x无法用上述方法设置subjectAltName
属性,而缺乏了该属性的证书即使添加到系统信任证书列表中,浏览器仍会将网站标记为“不安全”。(当然你不在乎的话这属性有没有自然是无所谓了。毕竟又不是不能用hh)
至于如何用OpenSSL 1.0.x生成带有subjectAltName
属性的的证书,实在懒得找了自己去查吧。。(摆烂)
🤔如何升级OpenSSL?
至于如何升级OpenSSL,此事在介绍CentOS 7编译安装Python3.10的文章中亦有记载。升级后需要把上述命令中的openssl
替换为openssl11
。
2. NGINX配置
在Nginx的设置文件中为网站henchat.net创建一个新的server:
server {
server_name henchat.net;
listen 443 ssl;
ssl_certificate /存储位置/_.henchat.net.crt;
ssl_certificate_key /存储位置/_.henchat.net.key;
# 其它设置项
}
用nginx -t
检查设置无误后,nginx -s reload
重载服务器设置。
3. 本地计算机配置(Windows)
现在,用https://henchat.net
应该就能访问到你的页面了。但是有一个问题:每次访问浏览器都会弹出安全警告,左上角的“不安全”图标也格外刺眼。如果你介意这个,那么请通过以下步骤将证书导入到系统的信任证书列表。
- 将.crt证书文件传输到本地。
- 双击.crt文件,选择“安装证书”。
- 选择“本地计算机” → “将所有证书放入以下存储” → “受信任的根证书颁发机构”。
之后再用浏览器访问网站就不会显示“不安全”了。当然这只对导入了证书的设备生效,其他用户还是会被安全警告页面硬控几秒钟(然后默默点×)。