Let’s Encrypt申请RSA+ECC双证书,支持通配符

摘要

Let’sEncrypt现在也支持申请ECC证书。可通过acme.sh自动化申请,也可通过Certbot手工申请。

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

  1. 复制 acme.sh 到你的 HOME 目录($HOME):~/.acme.sh/
    之后所有生成的证书也会放在这里
  2. 创建别名:acme.sh=~/.acme.sh/acme.sh
  3. 创建 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

  1. 手工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验证的方式不能自动续期,一般用于测试
  1. 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的方式可以自动化续期
  1. 通配符证书
    通配符证书和单域名命令相同,需要注意的是,域名要用 ' ' 引起来。
    如:
## RSA
./acme.sh --issue --dns dns_ali -d '*.xinac.com'

## ECC
./acme.sh --issue --keylength ec-256 --dns dns_ali -d '*.xinac.com'
  1. 多域名证书
    使用脚本可同时申请多域名证书(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 双证书

 

weinxin
新逸IT技术
扫一扫关注微信公众号
Admin
  • 本文由 发表于 2020-07-21
  • 转载请注明:https://www.xinac.net/8797.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定