Let's Encrypt
可以免费申请DV证书,甚至可以免费申请通配符证书!
【为什么我强烈建议你使用ECC 证书】文章源自新逸网络-https://www.xinac.net/8797.html
由于ECC
证书的诸多好处,Let's Encrypt
现在也支持申请ECC证书了。文章源自新逸网络-https://www.xinac.net/8797.html
申请ECC证书可以使用两种方式:文章源自新逸网络-https://www.xinac.net/8797.html
1、通过 acme.sh 自动化申请,非常方便文章源自新逸网络-https://www.xinac.net/8797.html
2、通过 Certbot 手工申请,可参考:文章源自新逸网络-https://www.xinac.net/8797.html
文章源自新逸网络-https://www.xinac.net/8797.html
文章源自新逸网络-https://www.xinac.net/8797.html
- 安装
curl https://get.acme.sh | sh
- 使用
cd ~/.acme.sh
export Ali_Key="<key>"
export Ali_Secret="<secret>"
## 1、这里直接以多域名和通配符证书为例,其它情况请看下文
## 2、通配符证书必须以DNS验证,请提前申请AccessKey ID和Secret
## 3、如 xinac.com 和 *.xinac.com 结合的情况可满足所有地方使用了
## 4、nginx 1.11版本后支持双证书,其他服务器请自行解决
- RSA证书
# 创建目录
mkdir -p /etc/letsencrypt/acme.sh/xinac.com/rsa/
# 生成证书
./acme.sh --issue --dns dns_ali -d xinac.com -d '*.xinac.com'
# 安装证书到指定目录
./acme.sh --installcert -d xinac.com \
--key-file /etc/letsencrypt/acme.sh/xinac.com/rsa/privkey.pem \
--fullchain-file /etc/letsencrypt/acme.sh/xinac.com/rsa/fullchain.pem \
--cert-file /etc/letsencrypt/acme.sh/xinac.com/rsa/cert.pem \
--ca-file /etc/letsencrypt/acme.sh/xinac.com/rsa/chain.pem \
--reloadcmd "/etc/init.d/nginx reload"
- ECC证书
# 创建目录
mkdir -p /etc/letsencrypt/acme.sh/xinac.com/ecc/
# 生成证书
./acme.sh --issue --keylength ec-256 --dns dns_ali -d xinac.com -d '*.xinac.com'
# 安装证书到指定目录
./acme.sh --installcert --ecc -d xinac.com \
--key-file /etc/letsencrypt/acme.sh/xinac.com/ecc/privkey.pem \
--fullchain-file /etc/letsencrypt/acme.sh/xinac.com/ecc/fullchain.pem \
--cert-file /etc/letsencrypt/acme.sh/xinac.com/ecc/cert.pem \
--ca-file /etc/letsencrypt/acme.sh/xinac.com/ecc/chain.pem \
--reloadcmd "/etc/init.d/nginx reload"
- 域名不在同一服务商?
# 支持同时申请不同服务商的域名
# 如:xinac.cn 在阿里注册,xinac.net 在腾讯注册;可同时申请
# 每个域名都用 --dns 指定服务商即可
export Ali_Key="<key>"
export Ali_Secret="<secret>"
export DP_Id="<id>"
export DP_Key="<key>"
./acme.sh --issue \
--dns dns_ali -d xinac.cn --dns dns_ali -d '*.xinac.cn' \
--dns dns_dp -d xinac.net --dns dns_dp -d '*.xinac.net' \
--keylength ec-256
- 配置nginx
server {
listen 443 ssl http2;
server_name xinac.com *.xinac.com;
# ECC Cert
ssl_certificate /etc/letsencrypt/acme.sh/xinac.com/ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/acme.sh/xinac.com/ecc/privkey.pem;
# RSA Cert
ssl_certificate /etc/letsencrypt/acme.sh/xinac.com/rsa/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/acme.sh/xinac.com/rsa/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 30m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
......
}
- 自动续期
./acme.sh --install-cronjob
文章源自新逸网络-https://www.xinac.net/8797.html
文章源自新逸网络-https://www.xinac.net/8797.html
一、安装 acme.sh
curl https://get.acme.sh | sh
安装的过程中,做了3件事:文章源自新逸网络-https://www.xinac.net/8797.html
- 复制
acme.sh
到你的 HOME 目录($HOME):~/.acme.sh/
之后所有生成的证书也会放在这里 - 创建别名:
acme.sh=~/.acme.sh/acme.sh
- 创建 cron 每日任务去检查是否有证书需要更新
如:0 0 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" > /dev/null
查看帮助信息:文章源自新逸网络-https://www.xinac.net/8797.html
cd ~/.acme.sh
./acme.sh -h
二、生成单域名证书
单域名证书可使用文件验证域名的所有权,也可以使用DNS验证。文章源自新逸网络-https://www.xinac.net/8797.html
./acme.sh --issue -d example.com -w /home/wwwroot/example.com
- 其中
-w /home/wwwroot/example.com
是你的web站点的root目录,确保有读写权限 - web目录仅作为验证需要,生成后的证书位置在
~/.acme.sh/example.com/
,可以使用安装命令复制到指定位置。
三、生成通配符证书
通配符证书只能通过DNS验证域名所有权,支持手工验证和API自动验证。文章源自新逸网络-https://www.xinac.net/8797.html
- 手工DNS验证
- 申请RSA证书:
./acme.sh --issue --dns -d blog.xinac.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
## 根据提示添加DNS解析,然后执行
./acme.sh --renew -d blog.xinac.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
- 安装RSA证书(将证书按需要的格式复制到指定的位置):
## 目录需要先创建;--reloadcmd 是安装后执行的操作,可选,命令可修改
mkdir -p /etc/letsencrypt/acme.sh/xinac.com/rsa/
./acme.sh --installcert -d xinac.com \
--key-file /etc/letsencrypt/acme.sh/xinac.com/rsa/privkey.pem \
--fullchain-file /etc/letsencrypt/acme.sh/xinac.com/rsa/fullchain.pem \
--cert-file /etc/letsencrypt/acme.sh/xinac.com/rsa/cert.pem \
--ca-file /etc/letsencrypt/acme.sh/xinac.com/rsa/chain.pem \
--reloadcmd "/etc/init.d/nginx reload"
- 申请ECC证书:
./acme.sh --issue --keylength ec-256 --dns -d blog.xinac.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
## 根据提示添加DNS解析,然后执行
./acme.sh --renew --ecc -d blog.xinac.com --yes-I-know-dns-manual-mode-enough-go-ahead-please
- 安装ECC证书(将证书按需要的格式复制到指定的位置):
## 目录需要先创建;--reloadcmd 是安装后执行的操作,可选,命令可修改
mkdir -p /etc/letsencrypt/acme.sh/xinac.com/ecc/
./acme.sh --installcert --ecc -d xinac.com \
--key-file /etc/letsencrypt/acme.sh/xinac.com/ecc/privkey.pem \
--fullchain-file /etc/letsencrypt/acme.sh/xinac.com/ecc/fullchain.pem \
--cert-file /etc/letsencrypt/acme.sh/xinac.com/ecc/cert.pem \
--ca-file /etc/letsencrypt/acme.sh/xinac.com/ecc/chain.pem \
--reloadcmd "/etc/init.d/nginx reload"
(1)安装后需要手工配置服务器的SSL,脚本不会自动修改。
(2)手工DNS验证的方式不能自动续期,一般用于测试
- DNS API自动验证
DNS API支持数十种厂商,请查找自己的厂商正确使用命令。API链接
- 申请RSA证书:
## 这里以阿里云为例,key和secret到官网自行申请
export Ali_Key="<key>"
export Ali_Secret="<secret>"
./acme.sh --issue --dns dns_ali -d xinac.com
- 安装RSA证书(将证书按需要的格式复制到指定的位置):
## 目录需要先创建;--reloadcmd 是安装后执行的操作,可选,命令可修改
mkdir -p /etc/letsencrypt/acme.sh/xinac.com/rsa/
./acme.sh --installcert -d xinac.com \
--key-file /etc/letsencrypt/acme.sh/xinac.com/rsa/privkey.pem \
--fullchain-file /etc/letsencrypt/acme.sh/xinac.com/rsa/fullchain.pem \
--cert-file /etc/letsencrypt/acme.sh/xinac.com/rsa/cert.pem \
--ca-file /etc/letsencrypt/acme.sh/xinac.com/rsa/chain.pem \
--reloadcmd "/etc/init.d/nginx reload"
- 申请ECC证书:
## 这里以阿里云为例,key和secret到官网自行申请
export Ali_Key="<key>"
export Ali_Secret="<secret>"
./acme.sh --issue --keylength ec-256 --dns dns_ali -d xinac.com
- 安装ECC证书(将证书按需要的格式复制到指定的位置):
## 目录需要先创建;--reloadcmd 是安装后执行的操作,可选,命令可修改
mkdir -p /etc/letsencrypt/acme.sh/xinac.com/ecc/
./acme.sh --installcert --ecc -d xinac.com \
--key-file /etc/letsencrypt/acme.sh/xinac.com/ecc/privkey.pem \
--fullchain-file /etc/letsencrypt/acme.sh/xinac.com/ecc/fullchain.pem \
--cert-file /etc/letsencrypt/acme.sh/xinac.com/ecc/cert.pem \
--ca-file /etc/letsencrypt/acme.sh/xinac.com/ecc/chain.pem \
--reloadcmd "/etc/init.d/nginx reload"
(1)安装后需要手工配置服务器的SSL,脚本不会自动修改
(2)使用API的方式可以自动化续期
- 通配符证书
通配符证书和单域名命令相同,需要注意的是,域名要用 ' ' 引起来。
如:
## RSA
./acme.sh --issue --dns dns_ali -d '*.xinac.com'
## ECC
./acme.sh --issue --keylength ec-256 --dns dns_ali -d '*.xinac.com'
- 多域名证书
使用脚本可同时申请多域名证书(SNI)
## RSA
./acme.sh --issue --dns dns_ali -d xinac.com -d '*.xinac.com'
## ECC
./acme.sh --issue --keylength ec-256 --dns dns_ali -d xinac.com -d '*.xinac.com'
四、更新证书
## RSA
./acme.sh --renew -d xinac.com --force
## ECC
./acme.sh --renew -d xinac.com --force --ecc
五、删除证书
## RSA
./acme.sh --remove -d xinac.com
## ECC
./acme.sh --remove -d xinac.com --ecc
证书删除后仅不会在列表中显示,目录和文件不会被移除文章源自新逸网络-https://www.xinac.net/8797.html
六、证书列表
./acme.sh --list
七、自动续期
## 60天后自动续期
./acme.sh --install-cronjob
## 立即执行续期
./acme.sh --cron
续期操作会自动化执行:文章源自新逸网络-https://www.xinac.net/8797.html
1、签发新的证书文章源自新逸网络-https://www.xinac.net/8797.html
2、复制证书到指定位置(根据之前的命令)文章源自新逸网络-https://www.xinac.net/8797.html
3、重启服务(根据之前的命令)文章源自新逸网络-https://www.xinac.net/8797.html
八、布署双证书
以 nginx 为例:文章源自新逸网络-https://www.xinac.net/8797.html
1、Nginx在版本1.11以后(包括1.11)才支持部署双证书文章源自新逸网络-https://www.xinac.net/8797.html
2、证书如果配置不当是不会显示双证书的
3、双证书配置后,不会同时发送给客户端,根据客户端的支持自动选择
4、
ssl_ciphers
属性要加上ECDHE-ECDSA-AES128-GCM-SHA256
并放在最前。此属性有其它的支持选项,可自行测试。5、配置完成后重启服务。
6、此参数申请的证书为:
ECDSA 256 bits
和RSA 2048 bits
,需要其它的可自行修改参数测试
server {
listen 443 ssl http2;
server_name www.xinac.com;
# ECC Cert
ssl_certificate /etc/letsencrypt/acme.sh/xinac.com/ecc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/acme.sh/xinac.com/ecc/privkey.pem;
# RSA Cert
ssl_certificate /etc/letsencrypt/acme.sh/xinac.com/rsa/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/acme.sh/xinac.com/rsa/privkey.pem;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 30m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
......
}
九、效果和测试
配置成功后,查看证书详情,可以看到:
ECC公钥的值是 ECC(256Bits)
RSA的显示为 RSA(2048Bits)
Firefox打开网站,查看证书详细信息:
算法标识符:椭圆曲线公钥
算法参数:ANSI X9.62 椭圆曲线 prime256v1 (即 secp256r1, NIST P-256)
如果有以上效果,则ECC+RSA
双证书安装成功。
网站测试:https://myssl.com/
SSL和TLS最佳配置实践(SSL and TLS Deployment Best Practices) 使用 acme.sh + nginx 使用 RSA 和 ECC 双证书
评论