免费 HTTPS 证书

生成证书

首先去 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 一键部署了。

相关链接

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @Victor Oct 17, 2019

奉献爱心