之前初学HTTPS那篇文章中,就曾提到“CA证书”,它就是一个网站或者一个设备的凭证。

密码学作为基础

为了证明一个网站或者一个设备的身份,我们可以想象得到,利用签名与验签的方式进行验证。我先简要介绍一下所需的密码学应用——数字签名。

在密码学中,存在一种非对称算法,其利用的基础是“PN难”问题,即一个公式,往一个方向推导很容易,而反向推到却很困难。

例如RSA算法,就是利用两个极大质数的乘积,很容易求得,但已知乘积而进行因式分解却很困难,因此形成了“PN难”问题,可以将容易得到的乘积作为公钥进行广播,而两个质数作为私钥自己保存。

利用公钥加密的数据,可以用私钥进行解密,该应用就可以用来进行安全信息传输;同时,也可以利用私钥进行加密,用公钥进行解密,该应用就可以用来进行数字签名。

数字签名流程为,发起方传递特定信息给签名方,签字方可以用自己的私钥进行签名,再将密文传递给发起方,发起方可以用签名方的公钥进行解密验证,如果可以得到信息与自己发送的特定信息相同,就可以认定是签名方进行的签字。

而服务器方就是对外公开自身公钥,用户用公钥进行加密之后,再传递到服务器,这样可以保障在传输过程中的数据全加密,从而不泄露隐私。

CA

CA是证书的签发机构,也被称作公钥基础设施(Public Key Infrastructure,PKI)的核心,负责签发证书、认证证书和管理已颁发证书的机构。

每一个CA都包含一个证书(内含公钥和私钥),而公众可以得到CA证书(仅含有公钥),用以验证它所签发的证书。

任意服务器都可以向CA提供自身公钥进行证书申请。而CA用自身私钥进行签字之后,就认可了该数字证书。

也许你会想问,为什么需要一个特定的CA机构呢?我直接找服务器公钥进行数据加密,不就好了吗?

这涉及到网络攻防中的“中间人”攻击,即假设你与服务器之间经过了一个“黑客节点”,该节点,可以拦截服务器的公钥,向用户传递自己的公钥,等用户将信息传递给该节点之后,再利用服务器公钥进行加密传递给服务器,这样,服务器和用户仍可以正常通信,但是信息已经泄露了。

为了解决以上问题,所以需要一个公开的机构,提前将自身的证书预设在浏览器中,再经由它来保证服务器的公钥正确,而不是“黑客”的公钥。

CA证书

CA证书,顾名思义,就是CA颁发的证书。

CA证书的内容包括:电子签证机关的信息、公钥用户信息、公钥、权威机构的签字和有效期等等。证书的格式和验证方法普遍遵循X.509国际标准。

CA存在的证书叫根证书,由于存在根证书信息,所以浏览器可以进行验证服务器提供的CA证书是否为正确的证书,而保障验证服务器的身份。

并不是仅有根证书可以颁发证书,被CA证书验证的证书同样可以颁发证书,由于可以一级一级去追溯验证,所以可以验证其真实性。