Top Menu

在Debian8上安装letsencrypt对HTTPS进行加密

前段时间在VPS上用了自签名的SSL证书来给HTTPS进行加密,虽然用着没什么问题,但是每次访问都会弹出警告信息,浏览器网址也会变成红色,导致每次都要忽略警告才能访问,所以只能自己访问的时候用HTTPS,不能全局跳转到HTTPS。

2016-01-23_15-20-24

点击HTTPS信息,会显示证书未认证

2016-01-23_15-21-33

用自签名SSL证书加密HTTPS连接除了上面提到的警告信息以外,还有一个缺点就是无法在Chrome中自动保存密码,这样每次登录都要重新输入密码,非常麻烦。

为了解决这个问题,也想过是不是去申请一个认证机构颁发的SSL证书,但是看了价格之后,就放弃了

2016-01-23_17-59-15

今天在逛digitalocean社区的时候看到有篇文章介绍Let’s Encrypt提供免费SSL证书,去官网看了下,感觉比较靠谱,虽然有效期只有90天,但是相比其他动辄几百一年的管理费,算是非常合理了。

由于Let’s Encrypt基于ACME,所以可以实现无人值守状态下自动申请证书,自动更新证书以及自动注销证书。绝对是近年来最具颠覆性的一项发明,HTTPS至今没有得到普及的原因就是由于高昂的管理费和复杂的申请步骤,而Let’s Encrypt把这最大的两个困难都给清除掉了。

Let’s Encrypt的优点

  • 证书的生成方法和自己签名证书 一样简单
  • 生成的证书在客户浏览器网址栏显示为绿色已认证
  • 可以生成无限数量的证书
  • 证书可以无限次续期

Let’s Encrypt的缺点

  • 证书仅能用于HTTPS加密,无法对网站所有者和机构进行认证

安装letsencrypt

申请证书

Let’s Encrypt支持多种申请证书的方法,区别只在于认证域名所有权的方式不同。

Apache验证方式

目前只支持Apache2.4+Debian8,可以自动验证域名所有权并修改SSL配置。

运行命令是

这里采用一个根域名+一个子域名的格式,这样做有两个好处,首先是后面可以通过程序自动续期,第二是可以最大化利用证书配额。

如果在 /etc/apache2/sites-available 的配置文件里已经配置过HTTPS,letsencrypt会自动替换配置文件里的SSL证书地址

如果只想申请证书,可以运行下面的命令,只获取证书,不修改apache配置文件,需要手动修改证书位置

如果证书到期后,可以用下面的命令刷新证书有效期

webroot验证方式

网站根目录验证方式相比Apache验证方式,限制条件要少得多,只要网站能够通过浏览器访问,就可以申请SSL证书。原理是在网站根目录写入签名文件,与Google网站管理员验证网站所有权的方法类似。

命令如下

注意:网站根目录必须与域名所在的目录对应,如果根域名和子域名不在同一个目录则需要单独指定网站目录。即

如果想在一张证书中添加多个域名,可以用下面的命令

这个方法也可以用于更新证书有效期

上面命令中的–keep-until-expiring选项是设定只有在证书到期前30天才执行更新命令,否则不更新证书。而前面的–renew-by-default命令则是不管还剩多少有效期,直接更新证书。

添加子域名

如果要在已经申请的证书上增加子域名,可以运行如下命令

要保证添加的子域名可以通过浏览器访问,否则无法通过域名所有权认证

虽然这样以后只需要管理一张证书,但这样做有一个坏处,就是可以在证书的信息里看到所有子域名

如果不想让别人在证书信息里看到其他不公开的子域名,只需为子域名单独申请一张证书即可。

目前Let’s Encrypt对单个域名申请的证书数量有限制,在旧证书上增加域名和新申请一张证书都会占用一个申请名额,所以增加子域名请慎重。

泛域名

尝试了一下泛域名

返回 Wildcard domains are not supported ,不能用泛域名申请证书。

效果

配置好后,就可以用https访问了,通过HTTPS信息可以看到证书以及被认证了。

2016-01-23_19-25-51

添加HTTP到HTTPS跳转

通过在80端口添加跳转,可以强制让所有访问都采用HTTPS

测试HTTPS连接状态

要了解详细的HTTPS信息,可以在以下网站查询

https://www.ssllabs.com/ssltest/

或者直接替换链接中的域名获取HTTPS信息

https://www.ssllabs.com/ssltest/analyze.html?d=ChangeToYourDomain&hideResults=on

自动更新证书

证书有效期为90天,如果嫌手动更新麻烦,可以添加执行脚本到计划任务,自动更新证书有效期,脚本来自digitalocean官方,更新时间为每周一的2:30,如果检测到有效期在30天内则自动续期

注意:自动更新脚本默认的软件位置为 /opt/letsencrypt ,如果没有将letsencrypt下载到这个位置,需要重新下载或移动至该位置。更新脚本基于域名来过滤证书,所以在生成证书的时候保证第一个域名为根域名。

配额和限制

letsencrypt目前对证书的申请频率做了限制,如果超过限制会返回

目前的限制方式有

Registrations/IP:10次/3小时,即单个IP每三小时只能注册10次,所以如非必要不要删除已注册的认证文件,特别是如果主机是共享IP的。

Certificates/Domain:5证书/7天,即单个域名下每隔7天才能申请5张证书,证书是以根域名+1个子域名计数的,也就是说如果像下面这样申请证书虽然只申请了4个,但是也达到了限制数量,因为第三个证书因为有两个子域名占用了两个配额,而第四个证书虽然和第二个证书重复,但是也占用了一个配额

因此,在申请证书的时候,避免重复申请证书,否则就浪费了一个配额,也不要随便申请,毕竟一个礼拜只能申请4张。而且就算证书申请错了没有用也不要删除已经申请的证书,因为再次申请要等待7天,而且注销证书并不会释放配额!来源

注意:更新证书也会使用一个配额!!!

其他问题

第一次运行./letsencrypt-auto命令会安装很多依赖包,要花点时间

申请SSL证书的域名必须已经a2ensite启用,否则无法通过所有权认证。

同一个域名下的子域名增加证书不用重复申请,只需用证书更新命令,在原命令后用-d增加子域名刷新证书即可,否则在证书列表里会出现两个一样域名的证书,虽然没什么大问题,但是会影响证书的管理。

/etc/apache2/sites-available里的配置文件名需要和域名保持一致,否则无法自动修改配置。

链接

How to Set Up Let’s Encrypt Certificates for Multiple Apache Virtual Hosts on Ubuntu 14.04

SSL Report: blog.minirplus.com (106.185.32.69)

免费SSL证书Let’s Encrypt安装使用教程:Apache和Nginx配置SSL

https://github.com/letsencrypt/letsencrypt

https://letsencrypt.org

https://letsencrypt.readthedocs.org/en/latest/index.html

 

There are no comments yet

  • Hello, guest

Powered by WordPress. Designed by WooThemes