Oneinstack配置Let’s Encrypt – https证书以及cloudflare cdn介绍

(Last Updated On: 2017-11-06)

Let’s Encrypt 是一个于2015年三季度推出的数字证书认证机构,将通过旨在消除当前手动创建和安装证书的复杂过程的自动化流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的SSL/TLS证书。2017年6月28日,ISRG宣布,他们已经签发了一亿张证书。—来自wiki

现在大部分服务器建站脚本都有生成部署Let’s Encrypt证书的功能,之前也介绍了OneinStack:PHP/JAVA-LNMP/LNMT等服务器建站环境搭建脚本, 其实里面也有提及一些Let’s Encrypt的操作,只是当时简单为了快捷搭建,没有特别纠结,出于安全性最近才考虑加上https,介绍一下已有网站如何配置Let’s Encrypt。

0.前言

超文本传输安全协议英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLSHTTP over SSLHTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。Let’s Encrypt 就是签发SSL证书的机构。机构-证书-网站的关系就像公安系统-身份证-公民,为了证明你是你,当然证书还可以自签,但是浏览器是不信任的,就像拿着一张自己画的身份证一样,而且免费的也很简单,不推荐自签名。

HTTPS和HTTP的区别

1.https协议需要到ca申请证书,一般免费证书很少,需要交费,也有像阿里免费一年体验的或者像又拍需要绑定dns、cdn等限制的(又拍的免费证书其实也是Let’s Encrypt)。
2.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
3.http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4.http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
5.不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
(1) 窃听风险(eavesdropping):第三方可以获知通信内容。
(2) 篡改风险(tampering):第三方可以修改通信内容。
(3) 冒充风险(pretending):第三方可以冒充他人身份参与通信。

SSL证书种类

SSL 证书按大类一般可分为 DV SSL 、OV SSL 、EV SSL 证书。有的也会叫做域名型、企业型、增强型证书,不同的厂商叫法可能有所不同,但差别不大。

1)域名型SSL证书(DV SSL)

信任等级普通,只需验证网站的真实性便可颁发证书保护网站,即证书颁布机构只对域名的所有者进行在线检查。个人博客、中小企业网站和一些传统行业的形象展示类网站,申请一个域名型SSL证书(DV SSL)就足够了。通常是验证域名下某个指定文件的内容,或者验证与域名相关的某条 TXT 记录;

比如访问 [http|https]://domain.com/…/test.txt,文件内容: 2016082xxxxx39w7b20nelfa;

或在与域名相关的DNS服务器上添加一条 TXT 记录:domain.com –> TXT –> 20170xxxxxqmkiby43hpvy8

2)企业型SSL证书(OV SSL)

信任等级强,须要验证企业的身份,审核严格,安全性更高。要购买者提交组织机构资料和单位授权信等在官方注册的凭证,证书颁发机构在签发 SSL 证书前不仅仅要检验域名所有权,还必须对这些资料的真实合法性进行多方查验,只有通过验证的才能颁发 SSL 证书。

3)增强型SSL证书(EV SSL)

信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。与其他 SSL 证书一样,也是基于 SSL/TLS 安全协议,但是验证流程更加具体详细,验证步骤更多,这样一来证书所绑定的网站就更加的可靠、可信。它跟普通 SSL 证书的区别也是明显的,安全浏览器的地址栏变绿,如果是不受信的 SSL 证书则拒绝显示,如果是钓鱼网站,地址栏则会变成红色,以警示用户。

1.环境搭建

假设已经按照之前的文章,搭建好了服务器,还部署好了vhost虚拟机和网站(本人就是这种)。只需要使用 ./addons.sh 安装一个let’s encrypt客户端,然后 ./vhost.sh 添加虚拟机的时候就有 let’s encrypt 选项。

2.部署虚拟机和证书

以我的站点为例,需要卸载虚拟机,再重新部署,比较方便,当然还可以手动申请证书,再配置到nginx,这里选择简单的卸载重建。

1.卸载旧虚拟机

如果是新站点虚拟机,可以跳过这一步。卸载前注意备份,怕出问题的直接做个snapshot。如果特定站点的nginx文件domain.conf有自定义规则的建议也备份一下,卸载会删除 domian.conf,注意卸载不要选择删除站点目录(但是人总是习惯性按回车😂)。

#删除虚拟机指令
~/oneinstack> ./vhost.sh del

Please input a domain you want to delete: ssl.wateroot.com
#这里询问是否删除虚拟机文件目录,选n
Do you want to delete Virtul Host directory? [y/n]: n

Domain: ssl.wateroot.com has been deleted.

2.重新创建

重新创建,目录链接到原来的目录,ssl nginx 配置选y,let’s encrypt 选y,然后输入域名管理员的邮箱,其他按需要设置即可。

#创建虚拟机指令
~/oneinstack# ./vhost.sh

Please choose to use environment:
    1. Use php
    2. Use java
Please input a number:(Default 1 press Enter) 1

Do you want to setup SSL under Nginx? [y/n]: y

Please input domain(example: www.example.com): ssl.wateroot.com

#这里设置目录,如果默认域名和目录一样,可以直接回车
Please input the directory for the domain:ssl.wateroot.com :
(Default directory: /data/wwwroot/ssl.wateroot.com): 
Virtual Host Directory=/data/wwwroot/ssl.wateroot.com

Create Virtul Host directory......
set permissions of Virtual Host directory......
domain=ssl.wateroot.com

Do you want to add more domain name? [y/n]: n

#将http重定向到https
Do you want to redirect all HTTP requests to HTTPS? [y/n]: y

#使用let's encrypt证书
Do you want to use a Let's Encrypt certificate? [y/n]: y
ping: unknown host ssl.wateroot.com

DNS problem: NXDOMAIN looking up A for abc.wateroot.com
# 这里验证域名与A记录的DNS关系报错,原因可能是
# 1.DNS未设置解析,或者刚设置未生效,稍微等一下
# 2.设置了DNS解析,并且使用了cdn,导致cdn的ip和DNS的不一致

这里我的原因是第二种:我使用了cloudflare的免费cdn,所以需要暂时的去后台关闭cdn。关于为什么我选用一些免费cdn,原因是可以隐藏ip,cdn可能被墙,但总好过服务器直接被墙。cloudflare自己也有半程https(对于用户-cdn-站点而言属于半程),即用户到cdn是https,cdn到服务器就看服务器的配置了(关于半程https网上也有很多人持不乐观态度),而且用户只显示cloudflare的https证书,如果想全程使用自己的证书,则需要另外收费。建议有备案,有预算的正规站点,使用国内的cdn,付费体验更好。

Flexible SSL:您的网站访问者和Cloudflare之间有加密连接,但是从Cloudflare到您的服务器
  没有加密。即半程加密。优点在于:你的网站不需要SSL证书,用户也能实现SSL加密访问。

Full SSL:全程加密,即从你的网站到CDN服务器再到用户,全程都是SSL加密的。优点在于:只要你
  的服务器有SSL证书(不管是自签名证书还是购买的SSL),就可以实现SSL加密访问。

Full SSL (strict):全程加密,它与Full SSL的区别在于你的服务器必须是安装了那些已经受信
  任的SSL证书(即购买的SSL证书),否则无法开启SSL加密访问。

Strict (SSL-Only Origin Pull):企业模式。自动将所有的Http转化为Https加密访问,要求
  你的服务器安装了受信任的有效的SSL证书。

 

一系列下来后,成功创建,并且cloudflare可以选Full SSL模式(用户看到的只是cloudflare的证书),虽然let’s encrypt证书有效期只有90天,但是脚本配置了自动续期(这个90天后待考证,因为部分用户反映没有更新,可能和系统定时任务配置有关),上传一个简单的index.html到站点目录,chrome浏览器访问,显示https和安全,右键检查 – security -View certificate 查看证书情况。done!其实有脚本的帮忙,过程难度不大。

3.处理http和不安全脚本

使用了https的站点,如果使用http链接的资源如js,图片等,会显示不安全或者不安全脚本。安装完后,对于我的博客而言,之前的WordPress是使用http://作为路径的,需要到后台设置里面修改为https,其他的需要到外观-编辑查看替换。如果使用cdn之类的把cdn重新打开就行了,cloudflare会显示的是它自己的证书。

3.最后

  • https使用443端口,http使用80端口,装完后出现nginx说端口占用,无法重启,原因是443端口被我用到ss上了,只能ss让道,改端口了,修改ss配置文件,打开iptables新的ss端口,重启ss。
  • 对已有站点卸载重建后,nginx的自定义一些规则就需要自己设置。
  • 自动续期脚本,安装的时候自动生成,可以去检查一下是否存在
    #查看定时任务指令
    > crontab -l
    
    #显示下面的定时任务
    30 2 * * 1 /usr/local/python/bin/certbot renew --renew-hook "/etc/init.d/nginx reload"
  • 如果到期没有自动续期,使用下面的命令强制更新(和定时任务的指令一样)
    > /usr/local/python/bin/certbot renew --force-renewal --renew-hook "/etc/init.d/nginx reload"
  • 建议用个新的子域名测试一下(如:https://ssl.wateroot.com),熟悉一下过程,避免直接操作现有项目,容易出错。
  • 已有站点不要删除站点文件夹,备份注意备份记住要备份
  • 欢迎指教

《Oneinstack配置Let’s Encrypt – https证书以及cloudflare cdn介绍》有一个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Solve : *
12 + 5 =


此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据