14

我们希望使用 open ssl 使用两种方式的证书身份验证。

当我们如下打开 s_server 时,客户端能够连接到我的服务器:

openssl s_server -accept 12345 -cert our-cert.pem

(our-cert.pem 是我们的证书。)

这工作正常。但是,我的要求是:

  1. 验证传入证书是否对受信任的 CA 有效,并且
  2. 验证通用名称是否符合我们的预期。

我试过这个:

openssl s_server -accept 12345 -cert our-cert.pem -CApath /etc/ssl/certs/

这允许客户端连接。但我的问题是:

  1. 我如何确定它正在验证传入的 SSL 是否有效并由 CA 颁发?
  2. 如何验证公用名是我所期望的?
4

2 回答 2

7

对于服务器,您需要添加“-Verify”选项以强制客户端提供证书。深度是客户端证书链的最大长度。

那应该解决问题#1。

对于#2,我不确定是否有办法使用这些 OpenSSL 命令按公用名进行限制。

您可以在此处查看服务器/客户端命令的 OpenSSL 文档:

s_server

s_client

于 2013-05-21T06:06:49.190 回答
7

要测试 CA,请使用以下命令:

/usr/local/ssl/bin/openssl s_server -accept 7569 -cert /opt/GCTI/cert/host1_cert.pem -CAfile /opt/GCTI/cert/ca_cert.pem -key /opt/GCTI/cert/host1_priv_key.pem              

-cert is the public key file for this host
-key is the private key file for this host
-CAfile is the CA file, needed for self signed certificate
-port is the port number to open up

这将打开一个监听端口 7569,它将接受带有指定证书的 TLS 连接。

如果 CA 无效,那么最后一行将如下所示

Verify return code: 21 (unable to verify the first certificate)

要连接到这个服务器,完整的端到端测试(不是真正的问题)

openssl s_client -showcerts -connect host1:7569 -CAfile  /opt/GCTI/cert/ca_cert.pem  

将 host1 替换为您的实际主机。这将验证 TLS 服务是否有效并运行由同一 CA 签名的证书。

于 2014-04-10T07:55:16.433 回答