×

Let’s Encrypt
作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

虽然目前Let’s Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用。


1. 准备工作

根据官方的要求,我们在VPS、服务器上部署Let’s Encrypt免费SSL证书之前,需要系统支持Python2.7以上版本以及支持GIT工具。
这个需要根据我们不同的系统版本进行安装和升级,因为有些服务商提供的版本兼容是完善的。
最为简单的就是Debian环境不支持,可以运行apt-get -y install git直接安装支持,
如果是CentOS直接运行yum -y install git-core支持。
这个具体遇到问题在讨论和搜索解决方案,因为每个环境、商家发行版都可能不同。

2. 快速获取SSL证书

Let’s Encrypt肯定是考虑到推广HTTPS的普及型会让用户简单的获取和部署SSL证书,所以可以采用下面简单的一键部署获取证书。
PS:在获取某个站点证书文件的时候,我们需要在安装PYTHON2.7以及GIT,需要将域名解析到当前VPS主机IP中。

# 获取Let's Encrypt程序
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt

# 申请Let's Encrypt证书 
# 格式 --email [邮箱地址] -d [域名1] -d [域名2]
./certbot-auto certonly --standalone --email xxx@mail.com -d itfinn.com -d www.itfinn.com

如果80端口被占用,会导致申请证书失败,可以先把占用80端口的应用停止。

比如我这里占用80端口的是Nginx:

nginx-s stop
./certbot-auto certonly --standalone --email xxx@mail.com -d itfinn.com -d www.itfinn.com
nginx

3. 应用

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

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

如果我们使用的Nginx环境,那就需要用到fullchain.pemprivkey.pem两个证书文件

配置nginx启用证书

在配置文件上新建一个server语块:

server {
    listen 443 ssl;
    server_name itfinn.com;

    # SSL证书路径
    ssl_certificate /etc/letsencrypt/live/itfinn.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/itfinn.com/privkey.pem;

    ssl_stapling on;
    ssl_stapling_verify on;

    access_log /var/log/nginx/sub.log combined;

    location / {
        # 内容与80端口的server块一样, copy一份过来
        […]
    }
}

重新载入nginx:

nginx -s reload

现在 在浏览器中访问 https://itfinn.comhttps://www.itfinn.com 测试一下HTTPS是否正常、浏览器有没有报证书错误。

HTTP重定向至HTTPS

把nginx配置文件中80端口的server语块改为如下:

server {
    listen 80;
    server_name itfinn.com;
    #重定向
    rewrite    ^ https://$host$request_uri? permanent;
}

重新载入nginx即可。

自动更新证书

因为Nginx反代占用了80端口, 所以执行以下命令时需要先把Nginx停止, 执行完命令后再重启Nginx:

nginx -s stop

你可以使用以下语句来更新所有超过60天的证书:

./certbot-auto renew

也可以把更新命令写入/etc/crontab,实现自动更新:

# 写个自动更新脚本:  
vim mod_ssl.sh

#!/bin/bash
/usr/sbin/nginx -s stop
/root/ssl/letsencrypt/certbot-auto renew --quiet
/usr/sbin/nginx

# 写入/etc/crontab
crontab -e
0 * * */2 * /bin/sh /root/ssl/letsencrypt/mod_ssl.sh

测试更新操作:

./certbot-auto --dry-run renew

强制提前更新证书:

./certbot-auto renew --force-renew

4. 使用 acme.sh 部署

使用 acme.sh 部署 Let’s Encrypt 通过阿里云 DNS 验证方式实现泛域名 HTTPS — 云淡然

acme.sh --issue --dns dns_ali -d *.itfinn.com -d itfinn.com \
--installcert \
--key-file /root/ssl/all_domain/itfinn.com/privkey.key \
--fullchain-file /root/ssl/all_domain/itfinn.com/fullchain.pem \
--reloadcmd "nginx -s reload"

发表回复

作者

xfei@live.com

相关文章

CentOS 7 打开&关闭端口

1. 防火墙的操作 CentOS 7使用的是...

读出全部

好用的idea插件

1 IDEA插件安装 IDEA的插件安装非常...

读出全部

thymeleaf 教程

1 怎么使用 前端html页面标签中引入如下...

读出全部