菜单
一、阿里云免费证书
1.1登录阿里云控制台
登录后进入SSL证书管理(当前更名为:数字证书管理服务),点击SSL证书管理。点击个人测试证书。单用户每年只能购买一次,每年可申请20个证书。当前每年仅3个月有效期。降本。购买后如下:
1.2创建证书
1.3 证书申请
1.4 配置DNS解析
略
1.5 修改nginx的配置文件
server {
#HTTPS的默认访问端口443。
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
listen 443 ssl;
#填写证书绑定的域名
server_name <yourdomain>;
#填写证书文件绝对路径
ssl_certificate cert/<cert-file-name>.pem;
#填写证书私钥文件绝对路径
ssl_certificate_key cert/<cert-file-name>.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
重启Nginx服务。访问
但是以上方式每3个月需要人工操作。麻烦,有其他自动化解决方案吗?
二、证书自动签发并自动解析阿里云DNS
2.1 创建阿里云子账号并开通权限
阿里云权限策略里边有一个“AliyunDNSFullAccess”,给子账号这个权限即可
创建完成后将AccessKey ID与Access Key Secret记下来备用。
2.2安装acme.sh
1)安装很简单,命令如下,把 acme.sh 安装到你的 home
shell>>cd ~
shell>>git clone https://github.com/acmesh-official/acme.sh.git
shell>>cd acme.sh
shell>>./acme.sh --install -m my@example.com
强烈建议添加一条别名命令方便后边执行
shell>alias acme.sh=~/.acme.sh/acme.sh
2.3设置环境变量
将之前步骤中准备好的阿里云Accesskey填写到上面命令的中,并在终端中执行,执行后并不会有内容返回
export Ali_Key="yourAli_Key"
export Ali_Secret="yourAli_Secret"
2.4 证书签发
准备签发证书的命令,因为是签发,所以要使用“–issue”参数
shell>>./acme.sh --issue --dns dns_ali -d roadever.com.cn -d *.roadever.com.cn --cert-home /data/app/acme/cert
shell>>cd /data/app/acme/cert
[root@iZgc71arx7ijywr94r79eoZ roadever.com.cn_ecc]# ls
ca.cer fullchain.cer roadever.com.cn.cer roadever.com.cn.conf roadever.com.cn.csr roadever.com.cn.csr.conf roadever.com.cn.key
2.5 配置Nginx
将文件迁移至Nginx的cert,最后修改nginx配置文件如下:
此处因为多域名原因,将fullchain.cer命名为roadever.fullchain.cer
server {
#监听443端口
listen 443 ssl;
#对应的域名
server_name roadever.com.cn www.roadever.com.cn;
ssl_certificate cert/roadever.fullchain.cer;
ssl_certificate_key cert/roadever.com.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_prefer_server_ciphers on;
location / {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8081;
}
location ~ .*\.(js|css)$ {
proxy_pass http://127.0.0.1:8081;
}
}