SSL/TSL 证书

Posted by lanbery on May 22, 2019

免费 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

Thanks

./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