使用OpenSSL S_Server验证传入SSL

时间:2013-05-20 09:36:21

标签: ssl openssl ssl-certificate

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

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

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

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

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

  1. 验证传入证书对受信任的CA和
  2. 是否有效
  3. 验证通用名称是否符合我们的预期。
  4. 我试过这个:

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

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

    1. 我如何确定它是否有效验证SSL是否有效并由CA颁发?
    2. 如何验证Common Name是我期望的?

2 个答案:

答案 0 :(得分:6)

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

那应该处理问题#1。

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

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

s_server

s_client

答案 1 :(得分:4)

要测试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签名的证书。