security - 如何验证双向 SSL 证书?

标签 security http ssl tcp openssl

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

最佳答案

由于您使用的是自签名证书,因此您可以将该证书配置为好像它是一个且唯一的授权 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")

至于服务器端,通常也很容易配置,但这取决于您使用的网络服务器软件。

编辑:根据要求详细说明“您可以将该证书配置为好像它是一个且唯一的授权 CA”。

通常,对等方会出示证书,本地端会根据 CA(或 CA 列表)对其进行验证。 CA 是与对等方的证书不同的证书。 CA 证书直接或间接签署了对等方的证书。

使用自签名证书时,对等方可以出示该证书。本端可以假装同一个证书是CA证书。因为证书是由自己签名的(根据定义),所以在这种情况下它有资格被有效的 CA 签名...因为有效的 CA 本身就是!

关于security - 如何验证双向 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16674147/

相关文章:

java - 部署规则集是否允许 JNLP 在不签名 jar 的情况下运行?

java - 创建帐户时,如何将密码哈希安全地存储在内存中?

python - Django TastyPie : how do I return something other than 500 for UnsupportedFormat?

authentication - 如何使用 Java EE 6/Glassfish 实现重定向到登录页面

http - 与此站点的连接不完全安全

http - 如何查看 Websphere 应用程序服务器 (WAS) 响应

c++ - 具有保持事件状态 (HTTP) 的 recv 功能 block

java - SSL 连接超时和读取超时

ssl - 从 HTTP 重定向到 HTTPS 是否有加密?

ssl - Godaddy 的 Go 语言 SSL 证书