生成证书
首先去 https://keymanager.org 下载并安装客户端。
然后打开 https://freessl.cn/ 注册并登录帐号,点击创建证书会唤醒 KeyManager 弹出验证信息,大概如下图:
这里要注意一下 TrustAisa 是双域名有效期 1 年,而 Let’s Encrypt V2 是多域名通配符,有效期 3 个月。
申请证书的域名要填 *.domain.com,domain.com 这样才能申请通配符证书。
参考 申请证书-域名验证配置指南,在 godaddy 的 DNS Management 页面,添加一条 TXT 记录。
大概等待 10 分钟左右,点一下 配置完成,检测一下 按钮。验证通过就会成功生成证书。
导出一份 Nginx 服务器平台的证书备用。
Nginx 配置
安装
yum install epel-release
yum install nginx
systemctl start nginx
systemctl enable nginx
配置
安装完成之后,在浏览器输入服务器的 IP 可以看到 Nginx 的欢迎页面。它告诉我们需要去 /etc/nginx/nginx.conf
进行配置。
- 总配置文件:
/etc/nginx/nginx.conf
- 常用配置文件目录:
/etc/nginx/conf.d
新建项目配置文件 /etc/nginx/conf.d/my_site.conf
upstream my_site {
server localhost:8080;
}
# 将 http 重定向 https
server {
listen 80;
server_name domain.com www.domain.com;
return 301 https://$server_name$request_uri;
}
server {
# 关键点 通过 443 端口启用 http2 模式
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
server_name domain.com www.domain.com;
# ssl证书地址
ssl_certificate /etc/nginx/conf.d/my_site/domain.space_chain.crt;
ssl_certificate_key /etc/nginx/conf.d/my_site/domain.space_key.key;
# ssl验证相关配置
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers EECDH+AES128:HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
add_header Strict-Transport-Security "max-age=31536000"; # 使用 HSTS
proxy_pass_header Server;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_pass http://my_site;
}
}
手动上传证书
# 上传证书 HTTPS 证书。
scp /local/domain.space_chain.crt root@IP:/etc/nginx/conf.d/my_site
scp /local/domain.space_key.key root@IP://etc/nginx/conf.d/my_site
# 配置文件是否合法
nginx -t
# 检查并重启 Nginx 服务
nginx -t
service nginx restart
别忘了配置防火墙,打开对应的端口。
使用 KeyManager 一键部署
在证书列表的操作按钮中,选择一键部署,如下图:
添加好自己服务器的信息,可以一键上传证书并重启 Nginx 也是很简单。
检测
在部署完成后,可以到 https://myssl.com/ 进行检测,如果发现自己的证书评分不是 A+ ,最大的可能性就是没有使用 HSTS,使用 HSTS 的方法很简单,只要在添加 Strict-Transport-Security
这个 HTTP 头部信息即可。
用 nginx 服务器做说明:
add_header Strict-Transport-Security "max-age=31536000";
证书自动化
使用 Let’s Encrypt V2 的通配符证书需要每 3 个月手动续期,好在 freessl 花 1 块钱就能搞定 ACME 管理功能。
该功能能够使你通过一个在服务器上执行一个 shell 脚本进行证书的全自动签发、部署、更新。脚本基于 acme.sh 进行改造。
步骤
在服务器上安装脚本 curl https://freessl.cn/api/get.acme.sh?token=6df9c4e9-8485-4733-9bd6-07dd161cc99b | sh
安装完成之后需要退出再重新登录。
该脚本必须注册一个 ACME 客户端,这里必须指定一个你在 FreeSSL 注册的邮箱,这样才能与 FreeSSL Web 端相关联。
acme.sh --register-account --accountemail henry@example.com --server https://acme.freessl.cn/directory
Registering account
Registered
ACCOUNT_THUMBPRINT='xxxxx'
如果注册客户端的时候不是从 FreeSSL 获取的命令安装,可能你需要到 FreeSSL 后台激活你刚刚注册的客户端。
接着要回到 https://freessl.cn/acme 添加一条产品策略,域名填写我们的域名,产品类型选 Let’s Encrypt DVSANsWildcard 也就是泛域名的意思。
使用 ACME 申请证书,最好的办法是使用自动 DNS API 集成的方案。该模式通过集成 DNS API,实现 DNS 验证记录的自动添加删除。详细步骤可以查看相关链接中的 How to use DNS API 一文。
因为我的域名是从 GoDaddy 买的,需要按照说明需要先申请 Production Key,进入如下网址申请 https://developer.godaddy.com/keys/。
# 导入 key 和 secret
export GD_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export GD_Secret="asdfsdafdsfdsfdsfdsfdsafd"
# 创建证书,同步进行域名所有权认证,因为要申请泛域名的证书,所以第2个是 *.example.come
acme.sh --issue --dns dns_gd -d example.com -d *.example.come
The GD_Key and GD_Secret will be saved in ~/.acme.sh/account.conf and will be reused when needed.
没写完,后来还是选择用 KeyManager 一键部署了。
相关链接