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

2020-07-2115:18:12 评论 70
摘要

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

Let's Encrypt可以免费申请DV证书,甚至可以免费申请通配符证书!

【为什么我强烈建议你使用ECC 证书】

由于ECC证书的诸多好处,Let's Encrypt现在也支持申请ECC证书了。

申请ECC证书可以使用两种方式:

1、通过 acme.sh 自动化申请,非常方便

2、通过 Certbot 手工申请,可参考:


 

【增加一个简单的教程】

 

  • 安装
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

 

【以下为各种情况申请证书教程】

 

一、安装 acme.sh

curl https://get.acme.sh | sh

安装的过程中,做了3件事:

  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

查看帮助信息:

cd ~/.acme.sh
./acme.sh -h

二、生成单域名证书

单域名证书可使用文件验证域名的所有权,也可以使用DNS验证。

./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自动验证。

  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

证书删除后仅不会在列表中显示,目录和文件不会被移除

六、证书列表

./acme.sh --list

七、自动续期

## 60天后自动续期
./acme.sh --install-cronjob

## 立即执行续期
./acme.sh --cron

续期操作会自动化执行:

1、签发新的证书

2、复制证书到指定位置(根据之前的命令)

3、重启服务(根据之前的命令)

八、布署双证书

以 nginx 为例:

1、Nginx在版本1.11以后(包括1.11)才支持部署双证书

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 双证书


 

XINAC
  • 本文由 发表于 2020-07-2115:18:12
  • 转载请注明:https://www.xinac.net/8797.html
Java设计模式十三:模板模式 科技资讯

Java设计模式十三:模板模式

模板(Template Method)模式:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。
匿名

发表评论

匿名网友 填写信息

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