情景:当我们使用IP地址自建网站时,如gitlab、gitea等web服务时,即使添加了自签证书,浏览器也不会信任,像下面这样:

如上图所示,即使你将服务器证书下载下来,导入到根证书也无济于事。根本的原因是生成证书的时候缺少了SAN(Subject Alternative Name)字段,下面教大家如何生成具备具有SAN字段的证书,这样的证书生成后可以被浏览器信任。下面在Ubuntu系统中操作

1.创建 OpenSSL 配置文件

在你的证书目录,新建一个openssl.cnf文件,写入以下内容,填入你服务器的IP地址

[ req ]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no

[ req_distinguished_name ]
CN = 你服务器的IP地址

[ v3_req ]
subjectAltName = @alt_names

[ alt_names ]
DNS.1 = 你服务器的IP地址
IP.1 = 你服务器的IP地址

2. 生成证书和私钥

生成一个有效期100年的自签证书

openssl req -new -newkey rsa:2048 -days 36500 -nodes -keyout selfsigned.key -out selfsigned.csr -config openssl.cnf

3. 生成自签名证书

接下来,使用生成的 CSR 和私钥生成自签名证书selfsigned.crt

openssl x509 -req -in selfsigned.csr -signkey selfsigned.key -out selfsigned.crt -days 36500 -extfile openssl.cnf -extensions v3_req

4. 验证生成的证书

可以通过以下命令检查证书内容,看看有没有SAN信息

openssl x509 -in selfsigned.crt -text -noout

应该看到以下内容

X509v3 Subject Alternative Name:
    DNS:你的IP地址, IP Address:你的IP地址

5.生成完证书后,别忘了在web服务正确配置证书的路径及文件名

6.配置了证书和文件名后,别忘了把证书目录的权限改成web服务的用户的权限,不然可能无权限访问证书目录

7.改好了,别忘了将你的web服务重启

8.下载证书及安装

把selfsigned.crt文件下载下来,然后在windows+r 输入 certmgr.msc,打开证书配置页面

受信任的根证书颁发机构->所有任务->导入

导入你下载的证书文件并导入根证书位置

可以看到导入了一个以IP地址为名称的证书:

此时重启浏览器,访问我们部署的以IP地址为域名的网站,发现浏览器已经添加信任了

问题解决

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐