Fork me on GitHub

使用Let's Encrypt免费SSL证书实现全站HTTPS

使用Let's Encrypt免费SSL证书实现全站HTTPS

Let’s Encrypt is a free, automated, and open Certificate Authority.

由 ISRG(Internet Security Research Group,互联网安全研究小组)提供服务,并得到了 Mozilla、Cisco、Akamai、Electronic Frontier Foundation 和 Chrome 等众多公司和机构的支持,发展十分迅猛。它还有一个优点是免费,缺点是证书有效期90天和不支持泛域名配置,但是它可以自动续期,一个证书里可以添加多个域名。

安装

Let’s Encrypt 使用 Certbot 客户端来进行证书的申请/修改/续期等操作

Certbot-Auto

certbot-auto安装比较简单,依赖python

user@webserver:~$ wget https://dl.eff.org/certbot-auto
user@webserver:~$ chmod a+x ./certbot-auto
user@webserver:~$ ./certbot-auto --help

其他安装方式

申请证书

申请证书时letsencrypt会访问申请域名以检查域名拥有权限

./certbot-auto certonly --standalone --email example@qq.com -d crarun.com -d www.crarun.com

--standalone 表示使用内置服务器软件供letsencrypt认证,如果有apache或nginx占用了80或443端口,需要先暂停服务

./certbot-auto certonly --webroot --cert-name re0.in -w /webser/www/app01 -d crarun.com,www.crarun.com -w /webser/www/app02 -d app02.crarun.com

--webroot 会在指定的根目录下创建.wellknow目录,letsencrypt会请求该目录里的文件以确认你拥有该域名,需要通过-w参数来指定域名下的根目录

在完成Let's Encrypt证书的生成之后,我们会在"/etc/letsencrypt/live/crarun.com/"域名目录下有4个文件就是生成的密钥证书文件。

cert.pem  - Apache服务器端证书
chain.pem  - Apache根证书和中继证书
fullchain.pem  - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件

使用证书

nginx配置

worker_processes auto;

http {

    ...

    server {
        listen              443 ssl;
        keepalive_timeout   70;

        ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers         AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
        ssl_certificate     /usr/local/nginx/conf/fullchain.pem;
        ssl_certificate_key /usr/local/nginx/conf/privkey.key;
        ssl_session_cache   shared:SSL:10m;
        ssl_session_timeout 10m;

        ...
    }

证书管理

修改证书域名

# --standalone模式
./certbot-auto certonly --standalone --cert-name crarun.com -d crarun.com,www.crarun.com,blog.crarun.com
# --webroot模式
./certbot-auto certonly --webroot --cert-name re0.in -w /webser/www/app01 -d crarun.com,www.crarun.com -w /webser/www/app02 -d app02.crarun.com

证书自动续期

由于证书只有90天有效期,letsencrypt提供了自动续期的方法

./certbot-auto renew --pre-hook "service nginx stop" --post-hook "service nginx start"
# --deploy-hook 仅在证书更新成功后执行
/root/certbot-auto renew --deploy-hook "docker-compose -f /webser/www/docker-compose.yml restart"

建议添加到crontab中,certbot会更新有效期在30天以内的证书,所以每天或者每周执行一次都是可以的

相关资料

Let's Encrypt

certbot

标签: ssl, https

添加新评论