xiaolingzi's blog

每天都在成长...

欢迎您:亲

centos7安装使用Let's Encrypt免费SSL证书以支持网站https方式访问

xiaolingzi 发表于 2016-12-05 14:21:17

由于当前大家对数据安全越来越重视,网络传输加密的诉求也越来越强烈,特别像谷歌和苹果这样的大公司的推动和要求下,大家也不得不开始使用SSL。目前商业证书对于个人和刚开始创业的人来说还是很贵的,Let's Encrypt推出免费SSL证书的目的也是借此普及HTTPS。

一、软件安装及获取证书

1.安装软件

生成Let's Encrypt证书目前已经有linux客户端软件来生成,叫certbot。centos的yum源里面已经添加了该软件,所以为了避免安装依赖的麻烦,推荐直接通过yum进行安装,命令如下:

yum install certbot

2.生成证书

目前支持生成单域名证书和多域名,尚未支持通配符域名(*.xxx.com)。

单域名生成命令如下:

certbot certonly --email xx@xxling.com --agree-tos --webroot -w /var/www/xxling -d xxling.com

其中 --email后面的邮箱改为实际邮箱,用于以后出问题的时使用, -w后面的是网站目录,-d后面是该网站域名。确定要保证目录存在和网站可以正常访问,生成证书时程序会在网站跟目录生成.well-known,然后在改目录下生成临时文件进行访问验证。所以要注意的是,很多网站都禁止了点开头.*目录的访问,这时生成会报错,需要把这个访问放开,生成完再改回去。

多域名生成命令如下:

certbot certonly --email xx@xxling.com --cert-name xxling.com --agree-tos --webroot -w /var/www/xxling1 -d xxling1.com -w /var/www/xxling2 -d xxling2.com

多个域名正式其实就是将-w和-d部分重复即可,可以通过--cert-name来指定证书名称。

提示如下即生成成功:

IMPORTANT NOTES:

- Congratulations! Your certificate and chain have been saved at

/etc/letsencrypt/live/www.vpser.net/fullchain.pem. Your cert will

expire on 2016-10-01. To obtain a new or tweaked version of this

certificate in the future, simply run certbot-auto again. To

non-interactively renew *all* of your certificates, run

"certbot-auto renew"

- If you like Certbot, please consider supporting our work by:


Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate

Donating to EFF: https://eff.org/donate-le

证书存在/etc/letsencrypt/live/xxx.com目录下。

日后如果需要添加新的域名到证书里面去,直接在原来的生成命令上加上新的网站目录和域名即可,生成时会提示你已经存在证书,是否要进行扩展,选择是就可以新域名也加进去。

3.证书更新

Let's Encrypt的证书默认是90天就过期,所以需要定期更新证书.可以crontab里添加计划任务来完成。在/etc/crontab文件里添加以下定时任务:

30 5 1 * * root /usr/bin/certbot renew --renew-hook "/usr/sbin/nginx -s reload"

以上每月1号5点30分执行更新,这个频率可以自己设定,不能太频繁。--renew-hook后面根据自己的web server来改成相应的命令,上面是nginx作为web server,证书更新后重新加载配置文件。

二、配置web服务使用SSL

这里主要讲讲nginx中的SSL配置,其他web server的配置方式自行搜索。

在要nginx中conf配置文件的对应网站的server节点中添加以下配置(原来网站的其他配置不动,证书路径根据具体进行修改):

listen 443 ssl;
#ssl on;
fastcgi_param HTTPS           $https if_not_empty;
ssl_certificate /etc/letsencrypt/live/xxling.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxling.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;

通过/usr/sbin/nginx -s reload重新加载配置文件即可生效。

如果需要将所有http请求强制跳转到https请求,可以在server节点中添加以下判断:

if ($scheme = http) {
    return 301 https://$host$request_uri;
}

这样通过http请求时就会通过301跳转的https请求上了。

最后需要将网站内容的所有资源请求也使用https,这样在chrome等浏览器上https及签名的锁才会变绿,否则前面还是感叹号。


三、删除证书

删除证书执行以下命令即可:

certbot delete --cert-name example.com


四、错误解决

安装过程中由于系统环境的原因可能会出现一些ptyhon相关的错误,错误和解决方法如下:

1.错误:

(1).ImportError: No module named 'requests.packages.urllib3'

(2).The 'urllib3<1.22,>=1.21.1' distribution was not found and is required by requests

(3)./usr/lib/python2.7/site-packages/requests/__init__.py:80: RequestsDependencyWarning: urllib3 (1.21.1) or chardet (2.2.1) doesn‘t match a supported version!

解决:

尝试卸载urllib3,重新安装requests,执行以下命令:

pip uninstall urllib3
pip uninstall requests
pip uninstall  chardet
   
pip install requests

2.错误:

(1).ImportError: ‘pyOpenSSL’ module missing required functionality. Try upgrading to v0.14 or newer.

解决:

卸载certbot,通过pip进行重新安装,执行以下命令:

yum remove certbot pyOpenSSL
pip install certbot

更多相关教程可以访问官方地址:

https://letsencrypt.org/getting-started

https://certbot.eff.org/docs/using.html#certbot-commands


      

转载请注明出处:http://www.xxling.com/article/3100.aspx

  • 分类: Linux
  • 阅读: (3185)
  • 评论: (1)
砖墙
xiaolingzi
目前支持通配符域名证书和DNS验证方式了,具体看这里 https://www.xxling.com/blog/article/3116.aspx
拍砖 取消
请输入昵称
请输入邮箱
*
 选择评论类型
300字以内  请输入评论内容