@Hadi
初来乍到 多多点赞
前言
最近在开发搭建一套微信小程序的过程中,开发工具调试一切正常,但在发布小程序开发版本后发现在request请求后台数据接口的时候发现了连接超时,在细看微信开发文档后,发现请求地址的白名单必须为支持超文本传输协议在安全加密字层的域名,故花费了两个小时解决,且留下操作记录。文章会先从理论概念入手,部署过程放在后面。
一、基本概念
1、http与https基本概念
HTTP(HyperText Transfer Protocol:超文本传输协议)
-
是一种用于分布式、协作式和超媒体信息系统的应用层协议。 简单来说就是一种发布和接收 HTML 页面的方法,被用于在 Web 浏览器和网站服务器之间传递信息。HTTP 默认工作在 TCP 协议 80 端口,用户访问网站 http:// 打头的都是标准 HTTP 服务。
-
HTTP 协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。
HTTPS(Hypertext Transfer Protocol Secure:超文本传输安全协议)
-
是一种透过计算机网络进行安全通信的传输协议。HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包。HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。
-
HTTPS 默认工作在 TCP 协议443端口
2、https工作流程
- (1)TCP 三次同步握手
- (2)客户端验证服务器数字证书
- (3)DH 算法协商对称加密算法的密钥、hash 算法的密钥
- (4)SSL 安全加密隧道协商完成
- (5)网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性;用协商的hash算法进行数据完整性保护,保证数据不被篡改。
截至 2018 年 6 月,Alexa 排名前 100 万的网站中有 34.6% 使用 HTTPS 作为默认值,互联网 141387 个最受欢迎网站的 43.1% 具有安全实施的 HTTPS,以及 45% 的页面加载(透过Firefox纪录)使用HTTPS。2017 年3 月,中国注册域名总数的 0.11%使用 HTTPS。根据 Mozilla 统计,自 2017 年 1 月以来,超过一半的网站流量被加密。
3、http与https区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
所提及的TCP 三次握手
转自: HTTP 与 HTTPS 的区别
4、https 的工作原理
转自: HTTP 与 HTTPS 的区别
-
1、客户端发起 HTTPS 请求 用户在浏览器里输入一个 https 网址,然后连接到 server 的 443 端口。 -
2、服务端的配置 *采用 HTTPS 协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。 -
3、传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。 -
4、客户端解析证书 这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。 如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。 -
5、传送加密信息 这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。 -
6、服务端解密信息 服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。 -
7、传输加密后的信息 这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。 -
8、客户端解密信息 客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
二、部署流程
1、获取ssl证书及私钥
途径有很多,如果涉及到中小微企业的项目建议采取云服务商的解决方案,个人开发者另寻途径即可,最终会得到一个压缩包,解压后会得到一个域名命名的证书文件及其私钥文件。
(如图所示已做脱敏处理)
2、后台linux为例
建议相关密码设置相同以防重新操作
===========================================
1、上传相关文件至 $tomcat/conf并进入目录
===========================================
2、设置密码并生成p12文件
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 -name server
===========================================
Enter Export Password:
Verifying - Enter Export Password:
-rw-r--r-- 1 root root 4122 5月 2 00:08 server_chain.crt
-rw-r--r-- 1 root root 1679 5月 2 00:08 server_key.key
-rw-r--r-- 1 root root 4716 5月 2 00:11 server.p12
===========================================
3、通过P12证书,生成jks 文件
keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -destkeystore server.jks
===========================================
正在将密钥库 server.p12 导入到 server.jks...
输入目标密钥库口令:
再次输入新口令:
输入源密钥库口令:
已成功导入别名 server 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消
-rw-r--r-- 1 root root 4122 5月 2 00:08 server.crt
-rw-r--r-- 1 root root 4337 5月 2 00:17 server.jks
-rw-r--r-- 1 root root 1679 5月 2 00:08 server.key
-rw-r--r-- 1 root root 4716 5月 2 00:11 server.p12
3、修改web服务器设置
===========================================
1、修改$tomcat/conf/server.xml
找到80端口的connector并在下面追加一行
<Connector port="443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/usr/local/tomcat/conf/server.jks"
keystorePass="$刚设置的jks文件的密码"/>
===========================================
2、重启tomcat服务
这样你的web资源就能同时支持http与https访问,
如果想设置默认https访问,只需将80端口的connector删除,再在同目录下的web.xml进行相关配置重启tomcat服务即可。
写在最后
到这里我的小程序已经能够正常访问,还是那句话,实践出真知~ 最近迷上了钓鱼,钓鱼佬可没有爱情hhhhhh
|