digdeep

凡是过去,皆是序幕。Read the fucking manual and source code.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::


1.概述
1.1 HTTPS概述
HTTPS即HTTP + TLS,TLS 是传输层加密协议,它的前身是 SSL 协议。我们知道HTTP协议是基于TCP的。简而言之HTTPS就是在TCP的基础上套一层TLS协议,对HTTP原来在TCP明文传输的内容进行加密,达到安全的目的。

HTTP 和 TLS 在协议层的位置以及 TLS 协议的组成如下图:



目前很多网站都启用了HTTPS,这肯定是未来的趋势。而且一些场景必须使用HTTPS协议的,比如微信公众号的某些功能、小程序接入H5等等。
详情参考:https://developer.baidu.com/resources/online/doc/security/https-pratice-1.html
1.2 Let’s Encripty介绍
Let’s Encrypt是一个非盈利的,免费的CA,可以提供免费HTTPS认证服务。
提供了一套完整的工具,基于这套工具,我们可以免费来搭建HTTPS 网站。
详情参考:https://letsencrypt.org/
1.3 ssllabs介绍
ssllabs可以提供对https部署进行安全监测,评价的服务。
详情参考:https://www.ssllabs.com/ssltest/analyze.html


2.Let’s Encrypt部署HTTPS服务
2.1 为什么使用Let’s Encrypt
国内有许多机构可以提供免费的SSL证书,但是一般只有一年的免费服务。而且基于cron可以实现定时更新证书,从而实现永久免费的目的。

2.2 安装Let’s Encrypt
第一步:安装git
因为后面需要使用从github拉取安装文件。
yum install git

第二步:获取letencrypt安装代码
cd /home
git clone https://github.com/letsencrypt/letsencrypt.git

letsencrypt就是从github下载下来的安装代码;


certbot-auto 是主要的安装命令。
第三步:签发SSL证书和密钥文件
./certbot-auto centonly --renew-by-default --email 1981715364@qq.com -d digdeep.diantusoft.com

可以看到使用standalone模式对 域名 digdeep.diantusoft.com 签发SSL证书成功。需要注意,standalone模式会使用本服务器的80端口来完成域名所有权的校验。所以需要保证80端口和443端口没有被占用。
standalone是一个独立的服务,可以看作是一个小型的webserver,它使用80或443端口来和letsencrypt服务器进行通信。因此,在使用standalone获取证书时,需要关闭正在运行的webserver,除非webserver使用的是80端口和443端口之外特殊的端口。

在完成Let's Encrypt证书的生成之后,我们可以看到生成的密钥证书文件:

cert.pem - Apache服务器端证书
chain.pem - Apache根证书和中继证书
fullchain.pem - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件
如果我们使用的Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件,在部署Nginx的时候需要用到。
第四步:配置nginx启用SSL

第五步:测试https

如何nginx –s reload 没有加载证书,则重启Nginx.

可以看到https访问正常。
2.3 证书续期
Let’s Encrypt证书的有效期为90天,过期时需要手动更新续期。
下面我们是有cron来进行定期更新:

在每个月的1号,1点30分进行证书的更新;
在每个月的1号,1点35分重启nginx,使用新的证书;

2.4 对证书安全性进行测试
https://www.ssllabs.com/ssltest/analyze.html 访问这个网址,输入域名:
digdeep.diantusoft.com就可以进行测试,测试结果:

可以看到A级,是很好的安全级别。
这个测试结果还包括其他有用的信息:
1. TLS版本支持信息


2. 模拟不同客户端进行测试,测试兼容性信息:

 


可以看到不支持 XP下面的IE8,对XP的IE6没有进行测试。

2.5     转发到Tomcat

使用nginx配置了https,后端的tomcat就无需配置https。配置如下:

upstream配置,这里因为测试没有配置集群和对集群的健康检查。

再次访问测试:

可以看到已经被nginx代理到了tomcat了。并且tomcat无需另外再配置https. 

 2.5 http强制跳转https

浏览器访问:http://digdeep.diantusoft.com:88 会被重定向到 https://digdeep.diantusoft.com

3.参考文档
1. https://developer.baidu.com/resources/online/doc/security/https-pratice-1.html
2. https://letsencrypt.org/
3. https://www.ssllabs.com/ssltest/analyze.html
4. https://www.cnblogs.com/kevingrace/p/6187072.html
5. https://www.cnblogs.com/intval/p/5763929.html

 

posted on 2019-04-05 11:46  digdeep  阅读(1963)  评论(0编辑  收藏  举报
不懂数据库和Web安全的架构师不是一个好的程序员。