1

我需要验证客户端和服务器的证书。如何在 TCP 级别和 HTTP 级别进行验证?对于 Http,我使用 cURL 客户端库。OpenSSL 是 SSL 库。这只能通过自签名证书来完成。我需要使用哪个 Web 服务器或 http 服务器来验证客户端的 SSL 证书?

4

1 回答 1

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 就是它自己!。

于 2013-05-21T16:04:35.540 回答