我们有一个应用程序,其中数据库连接需要 SSL 客户端证书。我们需要如何保护这个证书?如果别人得到它有什么影响?
我大致了解公私钥加密的工作原理,但我不知道证书包含哪个密钥。
我们有一个应用程序,其中数据库连接需要 SSL 客户端证书。我们需要如何保护这个证书?如果别人得到它有什么影响?
我大致了解公私钥加密的工作原理,但我不知道证书包含哪个密钥。
一般来说,客户端证书用于提供身份验证(与加密相反)。您需要确保私钥和密码(如果有)受到保护。如果有人得到它们,那么他们可以使用该证书凭证对数据库进行身份验证。如果您的应用程序需要密码才能访问数据库,那么等价的就是知道该密码的其他人。
在不知道您正在查看的应用程序文档的情况下,我会冒昧地说“客户端证书”是指私钥和签名证书;签名证书当然包括公钥。这是您真正需要保护的私钥。
证书包含公钥。证书是您向其他人展示的证书;对于 SSL 客户端身份验证,客户端在服务器请求时向服务器显示其证书。证书不需要以任何方式隐藏;它本质上是公共数据。
私钥是敏感部分。私钥用于计算数字签名,可以使用公钥(来自证书)进行验证。在 SSL 中,当服务器请求客户端证书时,客户端会显示他的证书(一条Certificate消息)并计算并发送一个签名(一条CertificateVerify消息)。被签名的数据是 SSL 握手中先前消息的组合,因此它包括“服务器随机数”,这是一种“挑战”。从服务器的角度来看,客户端只是通过能够在一条数据上生成签名来证明他对私钥的掌握,其中包括服务器选择的一些字节。
证书也是一个签名对象;它由创建证书的证书颁发机构签名。通过验证这个签名,服务器可以确保证书的内容是“正确的”。这是认证的另一部分:虽然客户端的签名表明客户端确实控制了与证书中的公钥对应的私钥,但服务器仍然必须确保证书中的公钥确实是被指称的用户身份拥有的公钥。证书是传达这种名称-密钥绑定的容器。
您的证书是公开的,因此不能“被盗”。其他人获得您的证书副本没有问题。毕竟,您很容易将它展示给任何要求它的服务器。
您的私钥很敏感。如果有人窃取了您的私钥,那么他可以在与所有已配置为接受您的证书的服务器交谈时冒充您。在正常情况下,任何实体都不会知道您的私钥;CA 没有它,SSL 服务器看不到它。您的私钥存储在计算机的内脏中,或者可能存储在智能卡中。在后一种情况下,私钥永远不会离开卡;卡自己计算签名。