关注VPS服务器
相关知识分享

Let’s Encrypt 官方推荐 Certbot 工具快速部署 SSL 证书

Let’s Encrypt免费 SSL 证书已经受到了包括 FireFox、Chrome 在内的众多主流浏览器的兼容和支持,目前国内的应用主要是提现在各大电商网站和门户网站上,可以提高访问和交易安全性。很多外贸公司网站也使用是因为 google 已经明确表示有提供 SSL 证书将会是一个加分因素。那么对于我们广大站长来说,也许将来某一天你的网站就需要添加这么一个 SSL 证书。

给网站添加 SSL 证书的方式有很多,老魏以后会分别写教程。今天魏艾斯博客(www.vpsss.net)说一下Let’s Encrypt 官方推荐Certbot 工具快速部署 SSL 证书

安装环境:CentOS6   军哥 lnmp1.3

一、安装 Let’s Encrypt 之前要准备的

把 CentOS 系统安装好,lnmp 环境配置好并添加域名和虚拟主机完毕。

以下两个步骤根据你自己的系统情况操作,根据老魏实测的结果如果是CentOS6/7 务必提前安装 epel 源,否则后面生成证书时可能会报错。

CentOS 5 升级 python 版本,点我查看python 版本从 2.4 升级到 2.7的操作流程。

CentOS 6/7 安装 epel,点我查看centos 安装 epel 源的操作流程。

二、Certbot 选择部署版本

lecenazfs01

根据你的实际情况来针对性的选择系统和发行版本,然后会跳转到 automated 安装向导。

三、CentOS6 中使用 Certbot 部署 SSL 证书

1、老魏选择了 CentOS6 系统和 lnmp 环境,输入以下命令开始自动安装:

cd /root/
wget https://dl.eff.org/certbot-auto
chmod a+x certbot-auto
./certbot-auto

图示如下

lecenazfs02

“Installing Python packages”这个过程需要稍等几分钟,中间有遇到 Is this OK 时候输入 y,回车即可。

lecenazfs06

这里下载 python 源默认是在国外了,如果你用国外 VPS 自然是没问题,而老魏测试 VPS 是国内的需要耐心等待一下,如果你使用国内 VPS 卡在 Installing Python packages…这个地方长时间不动,可以执行下面命令来修改 pip 源为国内的:
mkdir ~/.pip
cat > ~/.pip/pip.conf <<EOF
[global]
index-url = https://pypi.doubanio.com/simple/

[install]
trusted-host=pypi.doubanio.com
EOF
执行完,再重新运行 certbot 的命令应该正常安装 python 的包了。

2、生成域名 SSL 证书

admin@域名代表你域名对应的邮箱,尽量填写国外邮箱,国内的不知道好不好用。

A – 单域名

./certbot-auto certonly –email admin@域名.com –agree-tos –webroot -w /home/wwwroot/网站文件夹 -d www.域名.com

B – 多域名单目录生成单证书:(即一个网站多个域名使用同一个证书)

./certbot-auto certonly –email admin@域名.com –agree-tos –webroot -w /home/wwwroot/www.域名.com -d www.域名.com -d www.域名.com

C – 多域名多目录生成多个证书:(即一次生成多个域名的多个证书)

./certbot-auto certonly –email admin@域名.com –agree-tos –webroot -w /home/wwwroot/网站文件夹 1 -d 域名 1.com -d www.域名 1.com -w /home/wwwroot/域名 2 -d 域名 2.com -d www.域名 2.com

现在会弹出窗口,大概意思是把你的邮箱提交给一个 Let’s Encrypt 的合作伙伴,老魏这里选择的 n,你随意吧。

lecenazfs07

下面是这里可能遇到的两个错误(老魏全碰上了)和解决办法:

如果出现了下面红字的错误是因为没有提前安装 EPEL 源。

lecenazfs09

如果出现提示:访问 https://域名/.well-known/acme-challenge/**** 这个链接返回 403 错误(截图不完整了),所以必须要将对应虚拟主机配置文件里的
location ~ /\.
{
deny all;
}
这段配置删掉或注释掉或在这段配置前面加上
location ~ /.well-known {
allow all;
}

lecenazfs10

最后出现以下提示说明安装证书成功了。

lecenazfs08

2、生成的证书被放到/etc/letsencrypt/live/你的域名/目录中,这个是根据自己网址目录来的。进入里面可以看到有 cert.pem 、chain.pem 、 fullchain.pem  、privkey.pem 四个文件。

3、知道证书的安装路径之后,就涉及到在网站 Nginx 配置文件或者 APACHE 文件中添加路径了。

Nginx 的虚拟主机配置文件在:/usr/local/nginx/conf/vhost/域名.conf

命令:vi /usr/local/nginx/conf/vhost/域名.conf

输入 a 进入编辑状态,然后把下面已经配置好的代码(老魏实测没问题)复制粘贴到你那里,注意把下面所有的 域名.com 换成你的域名,证书路径也换成你自己的。结果就是主域名和 www 域名都自动 301 跳转到 https://www 域名,你可以根据自己的情况调整最后跳转到 https://主域名还是 www 域名。

server
 {
 listen 80;
 #listen [::]:80;
 server_name www.域名.com 域名.com;
 return 301 https://$server_name$request_uri;
 }

server
 {
 listen 443 ssl https2;
 ssl_certificate /etc/letsencrypt/live/www.域名.com/fullchain.pem;
 ssl_certificate_key /etc/letsencrypt/live/www.域名.com/privkey.pem;

 ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers on;
 ssl_session_cache shared:SSL:10m;

 # HSTS (ngx_https_headers_module is required) (15768000 seconds = 6 months)
 add_header Strict-Transport-Security max-age=15768000;

 # OCSP Stapling ---
 # fetch OCSP records from URL in ssl_certificate and cache them
 ssl_stapling on;
 ssl_stapling_verify on;

index index.html index.htm index.php default.html default.htm default.php;
 server_name www.域名.com 域名.com;
 root /home/wwwroot/www.域名.com;

include wordpress.conf;
 #error_page 404 /404.html;
 include enable-php.conf;

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
 {
 expires 30d;
 }

location /wp-content/uploads/ {  
location ~ .*\.(php)?$ {  
deny all;  
} 
} 

location ~ .*\.(js|css)?$
 {
 expires 12h;
 }

location ~ /\.
 {
 deny all;
 }
 access_log off;
 }

然后按 ESC 退出编辑状态,输入:wq 保存。

4、重启 nginx 使以上操作生效,命令如下:

/etc/init.d/nginx reload

5、用浏览器打开主域名或者带 www 的域名,都会自动 301 跳转到如下图的结果,也就是域名前面出现了小绿锁,点击绿锁会出现 Let’s Encrypt 验证的证书信息,说明添加成功了。

提示:1、截图网页中显示的 it’s ok 是老魏自己建了一个 index.html 扔进虚拟主机目录里的,如果是新建网站没有任何内容,就会显示“403 Forbidden”,不过不影响主域名和 www 域名自动 301 重定向到 https 域名。

2、这里仅限于新装 wordpress 博客的情况,至于已经在运行的 wordpress 博客,限于本文篇幅过长,老魏留着后面再补充。

lecenazfs041

6、这个网站 https://www.ssllabs.com/ssltest/可以测试 SSL 证书是否正常工作,我这个测试结果是 A+,很完美的结果!

lecenazfs05

目前 Let’s Encrypt 免费 SSL 证书默认是 90 天有效期,可以提前用下面命令手动续约 90 天:

./certbot-auto renew –dry-run

怕忘记续约过期了可以用crontab 定时执行命令到期自动续约,这样就可以放心了。

为了写这篇文章,老魏实测了 3 天才搞定整个流程。开始我用的国内 VPS 在测试,每次总是卡在 Installing Python 这里,因为默认的 Python 源是国外的,下载速度实在太慢了。后来又换了国外 VPS 又出现各种错误提示,最后又回到了国内 VPS。而网上的教程很多都是复制粘贴的,并没有经过自己的实际测试,很容易误导你。总之从安装过程来看这个 Cerbot 工具并不像官方说的那么快捷,一个不小心就会报错,大家安装的时候务必按照老魏上面的流程去做,我这里是没问题的。

允许转载,保留出处:魏艾斯博客 » Let’s Encrypt 官方推荐 Certbot 工具快速部署 SSL 证书
分享到: 更多 (0)

评论 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #-19

    安装了epel,同样把python升级到了2.7,依旧报红色的错。

    不知名程序员1年前 (2017-04-28)回复
    • 重新做一遍吧,如果还不行换别的方法也可以安装SSL证书

      魏艾斯博客1年前 (2017-04-28)回复
      • 确实不行,这样子搞了把我的SS弄得启动不了,Python还原了。使用了腾讯提供的免费证书搞定了。

        不知名程序员1年前 (2017-04-30)回复
        • 可能是端口冲突了,有SS的话需要先停止443端口,否则SSL证书也会占用这个端口的。

          魏艾斯博客1年前 (2017-05-01)回复