使用OpenSSL S_Server验证传入SSL

Hen*_*yes 10 ssl openssl ssl-certificate

我们希望使用open ssl使用双向证书身份验证.

当我们按如下方式打开s_server时,客户端可以连接到我的服务器:

openssl s_server -accept 12345 -cert our-cert.pem
Run Code Online (Sandbox Code Playgroud)

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

这很好用.但是,我的要求是:

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

我试过这个:

openssl s_server -accept 12345 -cert our-cert.pem -CApath /etc/ssl/certs/
Run Code Online (Sandbox Code Playgroud)

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

  1. 我怎样才能确定它是否验证了CA是否有效并由CA颁发?
  2. 如何验证Common Name是我所期望的?

gtr*_*rig 6

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

这应该解决问题#1.

对于#2,我不确定是否有使用这些OpenSSL命令通过公共名称限制的方法.

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

s_server

的s_client.First


ode*_*den 5

要测试 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
Run Code Online (Sandbox Code Playgroud)

这将打开一个侦听端口 7569,该端口将接受具有指定证书的 TLS 连接。

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

Verify return code: 21 (unable to verify the first certificate)
Run Code Online (Sandbox Code Playgroud)

要连接到此服务器,请进行完整的端到端测试(不是真正提出的问题)

openssl s_client -showcerts -connect host1:7569 -CAfile  /opt/GCTI/cert/ca_cert.pem  
Run Code Online (Sandbox Code Playgroud)

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