免费 https 证书
参考原贴:https://keelii.com/2016/06/12/free-https-cert-lets-encrypt-apply-install/ [如侵权,请联系删除]
officail
https://certbot.eff.org/docs/
免費申請證書
通過certbot申請,只需要四步,就完成SSL證書申請使用。
- 下載 certbot
- 生成免費證書
- 生成dhparams
- 配置Nginx
Certbot 項目
git clone https://github.com/certbot/certbot.git
cd certbot ./certbot-auto –help
生成
./certbot-auto certonly --webroot --agree-tos -v -t --email <your@mail.com> -w <your site path[/usr/share/nginx/html]> -d <your Domain[cnm.cn]>
如果返回正常就确认了你对这个网站的所有权,就能顺利生成,完成后这个目录会被清空 . 生成的證書默認存放在 /etc/letsencrypt/live/下
生成dhparams
使用 openssl 工具生成 dhparams
openssl dhparam用于生成和管理dh文件,dh(Diffie-Hellman)是著名的密钥交换协议,或称为密钥协商协议,它可以保证通信双方安全地交换密钥。但注意,它不是加密算法,所以不提供加密功能,仅仅只是保护密钥交换的过程.
openssl dhparam [-in filename] [-out filename] [-dsaparam] [-noout] [-text] [-rand file(s)] [numbits]
选项说明:
- [-in filename]:从filename文件中读取密钥交换协议参数。
- [-out filename]:输出密钥交换协议参数到filename文件。
- [-dsaparam]:指定此选项将使用dsa交换协议替代dh交换协议。虽然生成速度更快,但更不安全。
- [-noout]:禁止输出任何信息。
- [-text]:以文本格式输出dh协议。
- [-rand]:指定随机数种子文件。
- [-numbits]:指定生成的长度
openssl dhparam -out /etc/ssl/serts/dhparams.pem 2048
配置Nginx
server {
listen 80;
server_name ppn.one;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name ppn.one;
root /data/www/ppn;
add_header Strict-Transport-Security "max-age=31536000";
#ssl on;
ssl_certificate /etc/letsencrypt/live/www.ppn.one/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.ppn.one/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparams.ppn.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
location / {
}
}
</code>
定时更新
每天检查 renew
0 0 * * * root /data/www/renew.cert.sh
#!/bin/bash
DAYSDIFF=$((($(date +%s) - $(date +%s -d '20190811'))/86400))
DIFFMOD=$(($DAYSDIFF % 90))
if [ $DIFFMOD = 1 ];then
echo -e ">> exec renew certbot \n" >> /data/www/logs/renew.log
/root/work/certbot/certbot-auto renew >> /data/www/logs/renew.log
else
echo -e "did't need renew. \n" >> /data/www/logs/renew.log
fi
./certbot-auto certonly --email 邮箱 -d 域名 -d 域名2 --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
- cert.pem - Apache服务器端证书
- chain.pem - Apache根证书和中继证书
- fullchain.pem - Nginx所需要ssl_certificate文件
- privkey.pem - 安全证书KEY文件
- Nginx环境,就只需要用到fullchain.pem和privkey.pem两个证书文件
测试证书
openssl x509 -in /etc/letsencrypt/live/xxxx.com/fullchain.pem -noout -text
./certbot-auto certonly --email utech@tuta.io -d *.brokk.ca --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory
续期
因为有效期只有 3 个月我们需要自动续期来延长有效期。
通配证书只能通过 dns 的方式验证域名归属,我们需要通过脚本自动完成验证 –manual-auth-hook 设定验证脚本,否则无法自动更新
./certbot-auto renew --cert-name *.xxx.com --manual-auth-hook /home/certbot-sh/au.sh --dry-run
./certbot-auto certonly –email @gmail.com -d *.xxx.com –manual –preferred-challenges dns –server https://acme-v02.api.letsencrypt.org/directory
DNS 验证
window cmd.exe
nslookup -qt=txt xx.xx.com # txt MX
Centos
安装 bind-utils (nslookup dig )
Let’s encrypt 申请泛域名证书
将域名指向服务器,并请用80 服务
服务器下载certbot-auto并配置
wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto
申请泛域名证书
https://certbot.eff.org/
certbot-auto --server https://acme-v02.api.letsencrypt.org/directory -d "*.xxx.cc" -d "xxx.cc" --manual --preferred-challenges dns-01 certonly
** Notice **
中间会提示配置DNS txt 记录
配置后需要验证配置 window 可通过nslookup -qt=txt _acme-challenge.xxx.cc
手动验证txt 通过后再Continue
提示: Congratulations! Your certificate and chain have been saved
End