安全HTTPS相关杂谈 | 程序小兵

安全HTTPS相关杂谈

所谓的HTTPS(HypertextTransfer Protocol Secure)即安全的HTTP『安全的超文本协议』。HTTPS的安全基础是安全套接层(Secure Sockets Layer,SSL),确保了传统的HTTP以明文传输的被窃取偷窥的风险。HTTP工作在应用层(OSI模型的最高层),SSL协议工作在一个较低的子层,位于TCP/IP协议和HTTP协议之间。在HTTP报文传输前对其加密,并在到达时对其解密。严格地讲,HTTPS并不是一个单独的协议,而是工作在SSL协议上的HTTP协议。在现有的基础上,出现了TLS协议,对SSL进行了扩充,是SSL的继任者,但两者区别不大。

我们之所以采用HTTPS来替换HTTP,主要目的为了建立安全通道、保证数据传输的安全,同时可以通过签名技术确认通信双方的身份。谷歌和苹果2大互联网巨头公司已经放文,全面推广HTTPS协议。在单向认证和双向认证中的区别则是客户端有无证书。客户端与服务端都存在证书者称之为双向认证;仅服务器有证书者,例如HTTPS站点,则为单向认证。

如何确保我们的协议是安全的?

主要的原理类似『数字信封』,基于SSL协议通讯的双方利用非对称加密算法,协商一个用于对称加密的密钥(很难破解的随机数);密钥协商完毕,通讯双方用该密钥对数据进行对称加密,如3DES, AES等等,从而保证的数据的安全。

这里简单说明下什么是公开密钥加密:

公开密钥加密,也叫做『非对称加密』,顾名思义,采用的加密和解密不是用同一个密钥进行密码运算,而是有两个不同的密钥:加密密钥和解密密钥。或者换句更书面化的解释则为:公开密钥『公钥』与私有密钥『私钥』。这2个密钥是数学相关的(通过数学椭圆曲线算法经过一定的数学运算产生的一对具有数学逻辑关联极难被反向破解的一对『数字串』。用户用『公钥』进行加密数据原文后,只能由对应的『私钥』进行解密。当前公开密钥加密有著名的RSA算法及国内与之匹配版本的SM2。

在学习密码学中有个很有趣的理论证明:“怎么证明你拥有某个东西,而不不需要让对方看到你所拥有的这个东西?“也就是类似的:”怎么证明你妈是你妈,而不需要让别人看到你和你妈的户口本的隐秘信息“。

在数学的理论身份验证的做法是这样的:用『私钥』加密一段信息原文,推送给接受者;接受者再用对应的公开的密钥(公钥)进行加密得到原文,即可确认这个信息的来源来之与公钥匹配的私钥的某人,这个过程称之为数字签名。也就是由于这种不对称性的公开密钥密码系统的机制(没有私钥,无法破解),大大的被广泛应用到各个现实系统需求中。

在HTTPS的现实中,对于电脑小白的吃瓜的观众,最大直接能见到真身的就是在浏览网页中:

  1. 原网页的『http』开头的变为『https』;
  2. 原HTTP默认的端口80,现在HTTPS改为443;
  3. 各大浏览器产生对无合法证书的HTTP站点,会标注为红色链接,提示不安全站点,对已经在合法CA机构申请的证书的HTTPS站点会显示绿色安全的站点提示。

同时,使用者看不到,但确是最重要的就是在传输的过程中,进行加密传输、身份认证,防止原HTTP明文传输信息泄露的风险。

因此,需要更新升级HTTPS的站点服务器,需要从权威机构CA(CertificateAuthority)申请一个用于证明服务器用途的数字证书(或者叫做CA证书),只有用于对应的服务器时,客户端访问此链接才是信任。而这个『CA』机构则为PKI(Public Key Infrastructure,公钥基础设施)的核心内容,它主要负签发证书、认证证书、管理证书,同时制定政策和具体步骤来验证、识别用户身份、并对用户证书进行签名,以确保证书持有者的身份核公钥的使用权。

备注

PEM

Openssl使用PEM(RFC 1421-1424)文档格式。PEM全称是PrivacyEnhanced Mail,该标准定义了加密一个准备要发送邮件的标准。它的基本流程是这样的:

  1. 信息转换为ASCII码或其它编码方式;

  2. 使用对称算法加密转换了的邮件信息;

  3. 使用BASE64对加密后的邮件信息进行编码;

  4. 使用一些头定义对信息进行封装,这些头信息格式如下(不一定都需要,可选的):

Proc-Type,4:ENCRYPTED

DEK-Info:cipher-name, ivec

其中,第一个头信息标注了该文件是否进行了加密,该头信息可能的值包括ENCRYPTED(信息已经加密和签名)、MIC-ONLY(信息经过数字签名但没有加密)、MIC-CLEAR(信息经过数字签名但是没有加密、也没有进行编码,可使用非PEM格式阅读)以及CLEAR(信息没有签名和加密并且没有进行编码,该项好象是openssl自身的扩展,但是并没有真正实现);第二个头信息标注了加密的算法以及使用的ivec参量,ivec其实在这儿提供的应该是一个随机产生的数据序列,与块加密算法中要使用到的初始化变量(IV)不一样。

  1. 在这些信息的前面加上如下形式头标注信息:
-----BEGINPRIVACY-ENHANCED MESSAGE-----

在这些信息的后面加上如下形式尾标注信息:

-----ENDPRIVACY-ENHANCED MESSAGE-----

上面是openssl的PEM文件的基本结构,需要注意的是,Openssl并没有实现PEM的全部标准,它只是对openssl中需要使用的一些选项做了实现,详细的PEM格式,请参考RFC1421-1424。

The Public-KeyCryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。

PFX

PFX(Personal Information Exchange)证书文件是采用PKCS(The Public-KeyCryptography Standards)标准生成的证书。PKCS是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。

PFX文件通常包含一个证书和与之对应的私钥,现阶段证书采用PKCS #12 标准[14]。这类文件是高度敏感的,在导出密钥对时,Windows 提供用密码加密 .pfx 文件;而在导入密钥对时,您必须再次提供此密码方可导入。

CER

扩展名为 .cer 的文件采用 X.509v3 格式ASN.1 ,并由CA签名。这些文件中包含着一个公钥和额外的信息。这些文件一般用来提供给业务合作伙伴,以便他们能够使用公钥加密数据。

Java Key Store

Java Key Store(JKS)是Java语言中给出的一种密码保护的文件,可存储密钥和证书。JKS文件好比一个仓库,为防范别人随便乱拿,仓库可以设置一把锁,即JKS文件的密码(storepass)。仓库里可存放多种密钥,如公钥、私钥和密钥对(由配对公钥和私钥组成)。每个密钥都有一个名字,称为别名(alias)。仓库里的公钥只要你能进入仓库你就可以随便查看拿走,私钥则是有密码的(keypass),只允许有权限的人查看拿走。所以从JKS文件中读取公钥只需要知道JKS文件(仓库)的密码即可,但读取私钥时则还必须有私钥的密码。

2017-6-4

完。

文章目录
  1. 1. 备注
,