SSL系列教材 (一)- 概念介绍
步骤 1 : 首先谈谈 http
平时访问网页的时候,默认都是访问的 http 协议,比如 http://how2j.cn. 即便在地址栏没有明确写 http, 只写了一个 how2j.cn, 实际上浏览器也会自动补充上 http:// 的。
http 就是协议的名称。 协议是什么概念呢? 就是浏览器和服务端事先约定好的规则,按照预定的规则,服务器和浏览器之间能够互相理解。
http 协议的缺陷,这里主要谈安全方面的缺陷。 http 协议是明文传输的,无论数据,账号,密码都是在网络上明文传输的,所以就存在巨大的安全隐患。一个是容易泄露密码,再一个容易被劫持。
前段时间 how2j.cn 就被劫持了,效果就是访问 http://how2j.cn 的时候,会跳转到不可描述的网站去。 接下来就讲解一下劫持是如何发生的。
步骤 2 : http 劫持
how2j 的数据是放在阿里云上的, 如果用户要获取 how2j 的数据,是不会直接从 服务器上去取的。 会先找运营商,然后运营商去把数据取出来,取出来之后,再发给用户。
如图所示,这是3个主要的运营商,他们就扮演者中介的角色。
一般说来,这个中介什么都不会做,把从阿里云拿到的数据,返回给用户就完了。
但是,如果有黑客,或者运营商内部不可描述的原因,拿到的数据被动了手脚,那么再发给用户的数据,就不是原来的数据了。
how2j 被劫持,就是本应该返回正常的 html, 但是却被粗暴地修改成了:
用户感受就是访问之后,直接跳转到其他页面去了。
步骤 3 : ssl
因为 http 是明文传输的,所以很容易就被纂改, 于是就出现了被劫持的现象。
为了解决这个问题,我们需要在 http 协议上做一个增强,这个增强方式就是 进行 ssl 认证。 认证完成之后, http 协议就变成了 https协议啦。
https 协议从理论上来讲也会和 http 一样会被纂改,但是其难度和代价就是指数级别的上升了,所以从概率上来讲,再出现被劫持的现象就小了很多很多啦
步骤 4 : ssl 证书
要能够相对安全地上路驾驶,就必须要有驾驶证,这个证书最好是被广泛认可的权威机构颁发的,这样大家才信任它。
同样地道理:
要进行ssl 认证,就需要 ssl 证书。 这个证书最好是被广泛认可的权威机构颁发的,这样大家才信任它。
ssl 证书就是这么个意思~
下个章节就会讲解如何申请这个证书。
SSL系列教材 (二)- 如何在 阿里云 申请 SSL 免费证书
步骤 1 : 什么是 ssl 认证
就如同驾驶证一样,有了这个才能证明自己具备安全驾驶的基本素质。 而不是自己说自己是安全的就行了。。。
所以 要让网站支持ssl,也需要去申请一个 ssl 认证,有了之后才表示本网站的所谓安全是被认可的。
步骤 2 : 3种类型
ssl 证书简单说有三种: DV, OV, EV.
- 域名验证型(DV)SSL证书
证书名称:域名型SSL证书(Domain Validation SSL Certificate)
适合对象:中小型企业网站、中小型电子商务网站、电子邮局服务器、个人网站等
2. 组织验证型(OV)SSL证书
证书名称:企业型 SSL 证书(Organization Validation SSL Certificate)
适合对象:企业网站、电子商务网站、证券、金融机构
3. 扩展验证型(EV)SSL证书
证书名称:增强型 SSL 证书(Extended Validation SSL Certificate )
适合对象:银行、保险、金融机构、电子商务网站、大型企业
DV最简单,也有免费的,EV和OV都必须是付费的,而且动辄几大钱,不仅费用昂贵,也不利于大家学习研究。。。 所以我们还是会用 DV来做示例讲解。
步骤 3 : 权威机构
DV 类型的ssl 证书甚至是可以个人申请的,但是在部署成功之后,访问网站依然会出现如图所示的警告页面。
所以即便是申请 DV 类型也应当通过权威机构申请,比如 Symantec 赛门特克~
步骤 4 : 阿里云免费认证
通过阿里云就可以做免费的的 权威机构 DV 认证申请啦。
购买(免费)地址:
https://common-buy.aliyun.com/?spm=5176.2020520163.cas.3.342dbsGJbsGJeT&commodityCode=cas#/buy
注: 上面这个地址,过几个月不一定还存在,可能换成其他的入口了。 如果不能用了,就百度: ssl 阿里云,一般说来前两个就是了。
步骤 5 : 选择免费的DV
选择免费型 DV SSL, 下面会自动选择 Symantic,然后点击购买就行了。
步骤 6 : 管理ssl证书
进入阿里云控制台,左边的产品与服务-> 搜搜 ssl -> 就出来 SSL 证书(应用安全)了。
步骤 7 : 未签发的证书
此时就可以看到未签发的证书,点击 证书申请
步骤 8 : 填写申请
把基本信息都填写好,其他选项默认就可以了。
步骤 9 : DNS 验证
接着在域名解析里填写如图所示的内容,这样来证明确实对当前域名的拥有权。
一旦验证通过,那么就可以点击右下角的提交审核按钮了。
步骤 10 : 等待审核
接着就会弹出这个对话框,耐心等待审核通过即可。 站长是等待了1个小时通过的。到了具体,估计就是因人而异了,应该不会超过24个小时的。
步骤 11 : 审核通过状态
审核通过之后,就可以在已签发栏目里看到如图所示的状态。
步骤 12 : 下载证书
点击下载,就会弹出选项,选择那种服务器的证书下载。
教程主要是讲解 nginx和 tomcat的ssl 配置,所以下载 Tomcat 和 Nginx 即可。
步骤 13 : 配置 Nginx 和 Tomcat
接下来就是 配置 Nginx 和 Tomcat了,在后续章节展开,谢谢。
SSL系列教材 (三)- 配置 NGINX SSL 认证,并同时支持 HTTP 80 端口 和 HTTPS 433 端口
步骤 1 : 关于 Nginx
因为站长的how2j 是基于 nginx+tomcat来开发的,所以这里就分享这两种服务器如何进行 ssl 配置。
这个需要 nginx 基础,没有基础的同学可以先学习 nginx 系列教材:
https://how2j.cn/k/nginx/nginx-tutorial/1565.html
步骤 2 : ssl 证书
在 下载证书 中得到 nginx 证书如图所示。
步骤 3 : 复制证书
把证书复制到 nginx 目录下,如图所示,在 nginx 的根目录下。
步骤 4 : 配置 nginx.conf
在 listen 80; 下面增加3行代码即可:
listen 443 ssl;
ssl_certificate F://chrome_download//nginx//2992871_how2j.cn.pem; # 这个是证书的crt文件所在目录
ssl_certificate_key F://chrome_download//nginx//2992871_how2j.cn.key; # 这个是证书key文件所在目录
注: 这样做有个好处,就是同时支持 http 协议的 80端口,和 https 协议的 443 端口
步骤 5 : 重启访问nginx
重启访问的时候加上 https :
如图所示,出现警告,是因为 域名是 localhost 与证书里所写 how2j.cn (你的真实域名) 不一致导致的。
可以通过下个步骤来做到本地测试的时候绕开这个问题。
注: 这是 chrome 的警告窗口,不同浏览器的警告窗口各有不同,大同小异。
步骤 6 : host
打开位于如下目录的 hosts 文件
C:\Windows\System32\drivers\etc
步骤 7 : 修改 hosts 文件
如图所示,在最后一行加上一行:
127.0.0.1 how2j.cn
这样就表示 访问 how2j.cn (你自己的域名)的时候,就解析到 本机啦
注: 在win10 下修改 hosts 文件需要管理员权限,解封办法请参考:
Win10修改编辑hosts文件无法保存怎么办
步骤 8 : 再次访问
再次访问
SSL系列教材 (四)- TOMCAT 如何配置 SSL
步骤 1 : tomcat 支持 ssl
接下来讲解如何让 tomcat 支持 ssl
注: 没有基础的同学,请学习 tomcat 系列教材: Tomcat 教程
注: nginx不会, tomcat也不会,是不是。。。先不要着急学习如何上 ssl 呢。。。
步骤 2 : 下载 ssl 证书
与 nginx 类似的,需要到 下载证书 这里下载 tomcat 对应的 ssl 证书
下载解压出来就是图如所示,两个文件 ,pfx和 txt。
步骤 3 : 复制证书
接着把证书复制到 tomcat/conf/cert 目录下。
只用复制 pfx 文件。
cert 目录本身不存在,需要自己创建。
步骤 4 : 配置 server.xml
在 节点下,怎么图如所示的这么一大串。。。
我贴下来,主要有两个改动:
1. keystoreFile 要指定 pfx 的路径。
2. keystorePass使用 pfx-password.txt文件里的密码
<Connector port="443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="F:/chrome_download/tomcat/conf/cert/2992871_how2j.cn.pfx"
keystoreType="PKCS12"
keystorePass="pfx-password.txt文件里的密码"
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>
步骤 5 : 重启访问
重启访问即可。
如果在本机测试出现警告窗口,解决办法与 nginx 同理。 修改 hosts 文件
步骤 6 : 重定向
在 tomcat 里做重定向,比如到 localhost/a.jsp 这个文件。
如果重定向写的是 https://localhost/a.jsp, 那么没问题。
如果重定向写的是 /a.jsp, 那么就会跑到 http://localhost/a.jsp 这个地方去了,就不再是访问的 https 了。
为了解决这个问题,需要修改 server.xml ,修改办法看下个步骤。
步骤 7 : 重定向修改
要在80端口对应的 Connector 这里,增加下面4个。
secure=”true”
scheme=”https”
proxyPort=”443”
redirectPort=”443”
注:redirectPort 可能本身是存在的,并且值是 8443,需要修改为443.
这样重定向时候,就会自动采用 https 协议啦。
SSL系列教材 (五)- WEBSOCKET 如何支持 SSL
步骤 1 : WebSocket
不了解 WebSocket 的同学请先学习 WebSocket 系列教材
步骤 2 : ssl 的影响
以前 WebSocket 是走 ws:// 协议,现在服务器配置 ssl 认证了, ws:// 协议走不通了。
那么怎么办呢,直接把 ws:// 协议修改成 wss:// 就好了呢。。。