一直以来都懒的给网站添加HTTPS,但是我雪几年前就搞了不能落后啊,今天又偶然看到Let's Encrypt现在可以申请泛域名证书了,折腾了一下。
1. 用到的工具
2. 步骤
2.1. 安装
$ wget -O - https://get.acme.sh | sh
根据Acme.sh的wiki,安装过程包含了
- 把 acme.sh 安装到~/.acme.sh目录
- 创建alias acme.sh=~/.acme.sh/acme.sh方便使用
- 创建 cronjob, 每天 0:00 点自动检测所有的证书, 如果快过期了, 需要更新, 则会自动更新证书
2.2. 生成证书
首先需要验证域名的拥有权,有两种方式:
一种在http根目录下生成验证文件,LE去访问你的域名看能否访问到这个验证文件,验证成功后acme.sh自动再将这个验证文件删除。
对于nginx服务器,直接执行
$ acme.sh --issue -d example.com --nginx
第二种是给予acme.shDNS服务商提供的API权限,acme.sh在DNS解析里增加txt记录去验证,这样的好处是可以验证泛域名。
由于我要进行泛域名的申请,我使用了第二种。具体步骤如下:
2.2.1. 申请API Access Key
在https://ak-console.aliyun.com/#/accesskey申请API Access Key。
2.2.2. 将Key和Secret export到环境变量中
$ export Ali_Key="KEY"
$ export Ali_Secret="SECRET"
2.2.3. 生成证书
然后就可以
$ acme.sh --issue --dns dns_ali -d example.com -d *.example.com
API和Secret会被记录至 ~/.acme.sh/account.conf
2.2.4. 提取证书
生成完的证书在~/.acme.sh中,我们需要将其提取出来使用
$ acme.sh --installcert -d <domain>.com \
--key-file /etc/nginx/ssl/<domain>.key \
--fullchain-file /etc/nginx/ssl/fullchain.cer \
--reloadcmd "service nginx force-reload"
这样,证书就被安装到了/etc/nginx/ssl目录
2.2.5. 修改nginx.conf
/etc/nginx/nginx.conf
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/xuchen.wang.key;
2.2.6. 修改各虚拟主机配置
/etc/nginx/sites-available/default
server {
# listen 80;
# SSL configuration
#
listen 443 ssl default_server;
注释掉listen 80;同时启用listen 443;
然后重开一个server段监听80端口,将其301转向https链接:
#Redirect http MAIN
server {
listen 80;
server_name xuchen.wang;
rewrite ^(.*) https://$host$1 permanent;
}
以上便配置完成。
可以看到成果:
3. 参考资料
title: 为网站启用HTTPS支持
time: 2018-05-21 23:54
tags: HTTPS
category: Study