我需要验证客户端以及服务器的证书。如何在TCP级别和HTTP级别执行此操作?对于Http,我使用cURL客户端库.OpenSSL是SSL库。这必须通过自签名证书完成。我需要使用哪个Web服务器或http服务器来验证客户端的SSL证书?
答案 0 :(得分:0)
由于您使用的是自签名证书,因此您可以将该证书配置为唯一授权的CA.如果对等方提供了该证书,则它将被接受,因为它出现在CA列表中。如果对等方提出任何其他证书(或没有证书),则应拒绝该证书。
您没有说出使用libcurl的编程语言,但这是验证服务器的pyCurl示例:
req.setopt(pycurl.SSL_VERIFYPEER, 1)
req.setopt(pycurl.CAINFO, "/the/path/to/the/certificate/we/want/the/peer/to/use")
当然客户端想要向服务器验证自己:
req.setopt(pycurl.SSLCERT, "/the/certificate/the/client/will/present")
req.setopt(pycurl.SSLKEY, "/the/private/key/that/goes/with/it/in/PEM/format")
至于服务器端,它通常也很容易配置,但它取决于您正在使用的Web服务器软件。
编辑:按照“您可以将该证书配置为唯一授权的CA”的要求进行详细说明。
通常,对等方提供证书,本地端针对CA(或CA列表)对其进行验证。 CA是与对等证书不同的不同证书。 CA证书直接或间接签署了对等证书。
使用自签名证书时,对等方可以显示该证书。本端可以假装相同的证书是CA证书。由于证书是自行签名的(根据定义),因此在这种情况下,它有资格由有效CA签名...因为有效的CA本身就是!。