前言

给子域名的网站添加ssl证书,开启https功能,故此记录。

证书申请

这里使用腾讯云的免费ssl证书,申请前需要有需要腾讯云账号和实名认证

证书签发要验证该域名是否是你在使用,这里选择的验证方式为手动DNS验证,域名不在同一平台下也能用,挺方便的。

填写相关信息后点提交即可进入域名验证环节。

手动DNS验证

手动DNS验证需要手动为域名添加一条类型为CNAME的DNS解析记录,记录的内容会在验证界面给出,如下所示。

添加完成后点击下方的“验证域名”按钮即可。

验证成功后需要等待审核,我的几分钟就通过了。验证完成后,用于验证的解析记录可以删除。

证书文件

在控制台中找到SSL证书页面,找到我的证书,选择对应的证书下载。

我使用的是Nginx部署,所以选择的服务器类型为Nginx。下载下来的证书文件里包含*.csr*.key*.crt*.pem这四个文件,文件的含义如下:

文件名 说明
*.csr 证书签名请求(Certificate signing request),包含证书持有人的信息,如:国家,邮件,域名等信息。证书签发的时候用的,部署不需要。
*.key 单独存放的 pem 格式的私钥文件。
*.crt 证书文件,符合ITU-T X509国际标准的DER编码(ASCII)的证书文件格式,有可能是 PEM 编码,也有可能是DER编码,大多数应该是PEM编码,Linux 下叫 crt,Windows 下叫 cer,包含公钥以及与之相关的信息,用于验证服务器身份,并为客户端提供公钥用于加密通信。
*.pem 证书文件,基于Base64编码的证书格式,扩展名包括pem、crt和cer,包含公钥以及与之相关的信息,用于验证服务器身份,并为客户端提供公钥用于加密通信。可以单独存放证书或密钥,也可以同时存放证书或密钥。

腾讯云下载的文件里*.crt*.pem的文件内容是完全一样的,用哪个都行,这里用的是*.pem

部署

上传文件到服务器。上传*.key*.pem(或者*.crt)两个文件到服务器证书目录下,路径可以自定义,在Nginx配置文件中配置好就行。

修改Nginx配置,添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
#SSL 默认访问端口号为 443
listen 443 ssl;
#绑定证书的域名
server_name cloud.tencent.com;
#证书文件的相对路径或绝对路径
ssl_certificate /path/to/cloud.tencent.com_bundle.pem;
#请填写私钥文件的相对路径或绝对路径
ssl_certificate_key /path/to/cloud.tencent.com.key;
ssl_session_timeout 5m;
#协议版本
ssl_protocols TLSv1.2 TLSv1.3;
#加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
root /path/to/your/website;
index index.html index.htm;
}
}

验证配置是否有效:

nginx -t

更新配置:

nginx -s reload

HTTP自动跳转转HTTPS

在Nginx配置中添加以下内容,实现使用http访问80端口时自动重定向到使用https的443端口。

1
2
3
4
5
6
7
server {
listen 80;
#绑定证书的域名
server_name cloud.tencent.com;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}

参考

DNS验证: https://cloud.tencent.com/document/product/400/54500
Nginx 服务器 SSL 证书安装部署: https://cloud.tencent.com/document/product/400/35244