1、https介绍

基本概念
https就是将网络上交互的信息加密,加密之后,在网路上的任何一个位置被截取都无法被偷窥原文,最开始使用的是SSL(secure sockets layer)协议,后来在SSL3.0的基础上,出现了TLS(transport layer security)1.0,以及1.1,1.2…

工作模式

  • 首先握手
    (1)终端将加密规则发给服务器,服务器选择一组加密算法和HASH算法,并将身份信息以证书的形式发给终端,证书包含网址、公钥、颁发机构等。
    (2)终端确定合法性并接受,生成一串随机数的密码,并用公钥加密密码,对握手消息也用密码进行HASH加密,一并发送给服务器。
    (3)服务端用私钥解密,获得密码。如果HASH验证一致则表示握手成功,后续通信都用此密码加密和解密。

  • 涉及算法
    (1)非对称加密算法:RSA,DSA/DSS,加密密码,用非对称方式,即加解密密钥是一对的,用其一加密必用其二解密。
    (2)对称加密算法:AES,RC4,3DES,真正传输的数据用对称加密,加解密用同一个密钥,所以密钥的传输和保管很重要。
    (3)HASH算法:MD5,SHA1,SHA256,用于验证数据的完整性。

2、https应用

在apache和tomcat中配置https

3、CA

前文提到了,要应用HTTPS协议,需要一些原材料,即CA证书。证书是权威机构认证颁发的,且这个颁发机构在访问者的证书库名单中,可以直接被信任。当然也能自己认证,这需要访问者强制信任,另外一旦出现安全泄漏的问题,HTTPS访问者无法隔断(比如浏览器厂商会置之不理),正常的证书可以被吊销,也就无法继续使用证书去糊弄人了。

4、引申

https解决的只是网络传输的安全性,但没有解决某些页面或API的私有性,所谓私有性就是仅个别用户可访问或调用,如何鉴别这种身份的调用?

下面介绍一种方法:
(1)服务器管理密钥对,并将密钥对派发给用户(线下的方式),密钥对也可以理解为键和密,键用于索引查找,会包含在传输数据中,密才是真正意义上的需要妥善保管的钥匙。
(2)用户调用接口时,(键)当作接口的参数,并对所有参数,连同(密)进行MD5计算,将MD5值发送给服务器。
(3)服务器拿到(键 )后,找到(密),将其与接收到的参数同用MD5计算,比较两个MD5值是否匹配,匹配则为有效的请求。
(4)另外,为了防止REPLAY攻击,在参数里可以加入一个变化的元素——TIMESTAMP,这样每次MD5值必不同,如果在一段时间内一直相同,服务器可以根据这个TIMESTAMP拒其请求。

这种方式与HTTPS的异同:
(1)相同处,都有一个(密)参与到内容,都能防止数据被第三方篡改。
(2)不同处,这种方法无法像HTTPS一样,加密内容,防止内容被偷窥,解决了问题的不同面。