程序员必会基础:证书、根证书、CA、证书不受信任

程序员必会基础:证书、根证书、CA、证书不受信任

这是本人署名原创文章,未经许可不支持转载且请勿抄袭。本公众号的所有文章均原创。为了容易理解和记忆,文章以图解为主、代码为辅。如果您感兴趣,欢迎关注!

上过网的朋友一定知道http和https之间的区别:http是未加密的,而https是加密的。而之所以http未加密、https加密,是因为http使用明文socket,而https则使用加密socket(Security Socket Layer,已发展到Transport Layer Security)。在大学本科学习《计算机网络》这门课的时候,我们练习网络编程,所写的程序的是明文socket,是不安全的通信方式。

现在互联网安全通信基本上都是建立在SSL协议基础之上的(OpenSSL是SSL的开源实现)。

程序员必会基础:证书、根证书、CA、证书不受信任

SSL已发展到TLS

如果没有正确地使用SSL协议,那么程序在网络上传输的数据很可能被人恶意截获。所以,在开发需要处理敏感信息的程序的时候,很有必要充分了解SSL协议、证书、CA、PKI等基本常识,了解安全网络协议的常见错误用法。

程序员必会基础:证书、根证书、CA、证书不受信任

认证过程

SSL协议是基于非对称加密算法来实现客户端和服务器端之间的安全通信的。非对称加密算法生成一对公钥和私钥,用私钥加密的内容可以用公钥还原,并且根据公钥无法推测出私钥。

程序员必会基础:证书、根证书、CA、证书不受信任

非对称加密

SSL协议工作的第一步就是握手,即验证服务器身份,防止其他网站假冒。怎么实现?

方案一

在服务器端配置一个证书,证书里面包含一对公钥P和私钥S,还有网站名称、公司名称等明文内容U,例如google.com。如果想查看证书里面到底有哪些内容,可以在Chrome浏览器中点。

程序员必会基础:证书、根证书、CA、证书不受信任

查看证书

程序员必会基础:证书、根证书、CA、证书不受信任

查看证书

服务器端用私钥S对证书明文内容进行加密,再把加密的内容C和公钥P发送到客户端,即签名K。这样客户端就可以看到原内容U,上面写着google.com,于是可以确定这个内容来自谷歌服务端。

程序员必会基础:证书、根证书、CA、证书不受信任

数字签名

方案二

很明显,方案一并不能解决被假冒的问题。一个恶意网站也可以自己生成一对公钥、私钥,写上自己是google.com,并且用自己的私钥去加密"google.com",生成签名发送到客户端,客户端拿证书里面的公钥也能把google.com的字样还原出来,但是实际上它不是google.com。为了解决这个问题,我们事先把经过客户端完全确认的、身份真实可靠的证书内置在客户端,在进行网络通信的时候与服务器端发过来的证书对比,这样确认服务端身份。这就是为什么我们的系统里面有很多自带"证书"的原因。

程序员必会基础:证书、根证书、CA、证书不受信任

系统自带证书

方案三

虽然方案二解决了假冒问题,但是它有很多缺点。例如,服务端不能升级公钥/私钥对(因为公钥固化在客户端了),除非连同客户端一起升级(把存储在客户端的证书也替换了),很麻烦。如果客户端需要https访问多个服务端,这种方案还有很多问题。

方案四

为了克服方案四中的的缺点,CA方案(Certificate Authorities,认证颁发机构)出现了,即服务端不再自己创建证书,而是由CA颁发创建证书。这些CA必须是大家都认可的、众所周知的权威机构。1)首先,这些CA机构为自己颁发证书,证明它们自己的身份,并且把这些CA证书内置在客户端(即所谓的"根证书");2)然后,其他网站请求这些CA为自己颁发证书,CA如果同意颁发证书,那么在给其他网站颁发证书的时候,要用自己的私钥对证书进行数字签名,从而证明发出去的证书的确来自这个CA。采用这样的方案之后,客户端拿到带有google.com字样的证书时,它就知道这个证书是经过一家CA机构验证过的。

程序员必会基础:证书、根证书、CA、证书不受信任

CA

方案五

一家CA机构又可以验证另一个CA机构的身份,然后这个中间CA机构再去给其他网站服务端颁发证书。

程序员必会基础:证书、根证书、CA、证书不受信任

中级CA

现在你应该明白,为什么支持https必须要向CA买证书了吧。

如果对互联网编程技术、Java、Spring、Android、C/C++、Linux、个性化推荐、Community Detection、Machine Learning、Deep Learning、Data Mining、Gnuplot、LaTeX等技术感兴趣的话,欢迎关注本公众号(不限于Java)。

程序员必会基础:证书、根证书、CA、证书不受信任


分享到:


相關文章: