关于在 Windows 下信任自签证书的教程。
注:这篇文章是从旧的博客系统中迁移过来的、我觉得还存在价值的文章。但是由于时间关系,可能已经不再是最佳实践,请仅作参考。
主要是两个步骤:1、生成 SSL 私钥(.key 文件)和证书签发请求文件(.csr 文件);2、自己充当证书颁发机构(CA)进行签发生成证书(.crt 文件)。
1、检查是否已经安装 OpenSSL
openssl version
没有安装的话执行以下命令安装:
yum -y install openssl
2、生成私钥
秘钥文件名可以自己更改,我因为是给 K3s Rancher 用才这么命名。
# 允许后需要输入至少 4 位的密码,后面有去除密码的步骤因此随便输入即可
openssl genrsa -des3 -out rancher.key 4096
3、生成证书签发请求
在证书生成目录新建配置文件,以配置 SubjectAltName 来防止 Chrome 报“没有指定主题备用名称”的错误:
vi ext.ini
文件内容:
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = req_ext
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = Zhejiang
localityName = Locality Name (eg, city)
localityName_default = Hangzhou
organizationName = Organization Name (eg, company)
organizationName_default = k3s
organizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = rancher
commonName = Common Name (e.g. server FQDN or YOUR name)
commonName_max = 64
commonName_default = rancher.k3s.cn
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1 = k3s.cn
DNS.2 = *.k3s.cn
subj 参数解释:
字段 字段含义 示例 /C= Country 国家 CN /ST= State or Province 省 Zhejiang /L= Location or City 城市 Hangzhou /O= Organization 组织或企业 k3s /OU= Organization Unit 部门 rancher /CN= Common Name 域名或 IP rancher.k3s.com
生成证书请求文件:
openssl req -new -sha256 -out rancher.csr -key rancher.key -config ext.ini
4、去除私钥中的密码
以防止每次启动Web服务器时,都被要求输入密码:
openssl rsa -in rancher.key -out rancher.key
5、自己充当 CA 进行证书的签发
# 签发 10 年的证书
openssl x509 -req -days 3650 -in rancher.csr -signkey rancher.key -out rancher.crt -extensions req_ext -extfile ext.ini
完成后看下目录确定是否生成成功:
[root@VM-8-6-centos ~]# ls
# 有 .crt 文件说明成功
rancher.crt rancher.csr rancher.key ext.ini
6、Nginx 配置
...
...
server {
listen 80;
server_name rancher.k3s.com;
# 强制跳转 HTTPS
location / {
# root /usr/share/nginx/html;
# index index.html;
return 301 https://$server_name$request_uri;
}
}
server {
listen 443 ssl;
server_name rancher.k3s.com;
# SSL 配置
ssl_certificate /etc/nginx/ssl/rancher.crt;
ssl_certificate_key /etc/nginx/ssl/rancher.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
location / {
root /usr/share/nginx/html;
index index.html;
}
}
...
...
通过 HTTPS 访问仍然会显示不安全,查看下证书发现生效了但是因为是自签的所以不受信任:

7、Windows 本地信任证书
# cmd 键入 mmc 打开控制台
mmc
添加/删除单元:

为根节点添加证书选项,弹出框选择当前用户即可:

根目录中导入证书:

将服务上的 .crt 文件下载到本地,导入一路选择“是”即可完成导入:

回页面看一眼证书现在已经被信任了:

8、Chrome 信任证书
存在一些情况 Edge 已经信任证书,但是 Chrome 还不信任:

前往 Chrome 高级设置里的证书处导入即可:

结束。