CentOS 7 下签发 Let's Encrypt https 证书

在当今网络世界,HTTPS 是必备的,但 SSL 证书买起来比较贵,多亏 Let’s Encrypt 提供了免费的证书,地址是:https://letsencrypt.org/ 希望大家可以去捐赠他们。

安装 Let’s Encrypt 有软件和手工申请两种方式,另外这里还可以通过服务商申请就不介绍了。我自己是自己写了个脚本程序来处理的,本文介绍的是一个开源的项目 Certbot。

通过 Certbot 客户端申请

  • 安装 epel 软件源

    sudo yum install epel-release
    
  • 安装 certbot 和 certbot 的 nginx 插件

    yum install certbot-nginx
    
  • 获取证书

    certbot --nginx
    

基本到这里就完成了,不过这里有个问题就是如果你的 nginx 不是直接 yum install 安装,而是通过源码安装,则在最后一步会有问题,需要将地址指向 sbin/nginx

也可以先配置 nginx 文件

server {			
    listen 80;			
    server_name domain.com;			
    root /usr/local/domain.com;			
    index index.html index.htm;		
}

然后执行命令

certbot certonly --webroot -w /usr/local/domain.com -d domain.com -m [email protected] --agree-tos

完成后即可得到结果,证书保存的位置是 /etc/letsencrypt/live/domain.com/

此时配置 nginx 的 config 文件

server {
    listen 443 ssl;
    server_name domain.com;
    root /usr/local/domain.com;
    index index.html index.htm;
    ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
    ssl_session_timeout 1d;ssl_session_cache shared:SSL:50m;
    ssl_session_tickets on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK';
}
  • PFS

    在配置 nginx 的时候会有一个 PFS 的选项,关于 PFS 的解释,请看下面的相关阅读第二条目

    • 生成 PFS 键值

      mkdir /usr/local/ssl/private/ -p		
      cd /usr/local/ssl/private/		
      openssl dhparam 2048 -out dhparamfile.pem
      
    • 在 nginx 中使用

      ssl_dhparam /usr/local/ssl/private/dhparamfile.pem;
      

通过手工申请

省略

有效期

因为该证书是有有效期的,90 天为有效期,所以应该在 90 天到期前进行更新,简单的命令即可

certbot renew --dry-run //更新证书
certbot renew --quiet //静默方式

不想手工签发的可以通过 cron 脚本来设置更新,记得更新完后重启 nginx。

相关阅读


> 可在 Twitter/X 上评论该篇文章