背景
因为国内域名不备案, 如果不使用HTTPS访问网站, 那么会直接提示温馨提示:该网站暂时无法访问. 而且也正是因为HTTP请求会被拦截, 所以Google Let's Encrypt
命令行工具也无法使用, 因为其需要通过HTTP请求来完成验证.
手工获取证书
网站: SSL For Free
- 在输入框中输入多个域名 (使用空格隔开):
api.domain.com class.domain.com www.domain.com
- 点击
Create Free SSL Certificate
按钮 - 选择验证方式 - Manual Verification (DNS)
- 登录DNS管理网站, 添加TXT记录
SSL FOR FREE网站会叫你手动添加5条TXT DNS记录. 比如说
host为_acme-challenge.api.domain.com
, 值为Ak0E7oILRNkxggHPYSQRykZKSF3oyrNq6P7c0HB4rTg
. 那么在DNS管理那里添加TXT记录的时候在host那里输入_acme-challenge.api
即可. 自己的域名(domain.com)那部分不需要写进去. - 点击
Download SSL Certificate
之前, 先手动点击那几个网址验证一下, 因为DNS记录需要一些时间才能生效. - 点击
Download SSL Certificate
下载证书.
配置
解压得到三个文件, 然后在命令行输入:
echo -e "$(cat certificate.crt)\n$(cat certificate.crt)" > cert_chain.crt
这里要注意\n
是必须的, 要保证合并的crt
文件的格式如下:
-----BEGIN CERTIFICATE-----
secret
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
secret
-----END CERTIFICATE-----
即不能-----END CERTIFICATE----------BEGIN CERTIFICATE-----
在同一行, 否则Nginx会报错.
Nginx 配置:
ssl_certificate /path/cert_chain.crt;
ssl_certificate_key /path/private.key;
配置好后记得sudo service nginx restart
一下.