使用OpenSSL测试SSL / TLS客户端身份验证

氟嗪罗

我正在使用TLS开发客户端/服务器应用程序。我的想法是在客户端上使用证书,以便服务器对它进行身份验证。服务器上还有另一个证书,因此客户端也可以验证它是否连接到正确的服务器。

我想先测试并使用openssls_server和openssls_client验证提案。

到目前为止,我已经在服务器上创建了CA私钥,还创建了根证书。使用根证书,我已经签署了两个CSR,因此我为服务器获得了一个证书,为客户端获得了一个证书。

我还在客户端上安装了客户端证书+根证书,并在服务器上安装了服务器证书+根证书。

现在,我想尝试在openssls_server和openssl之间建立连接,s_client并验证它们是否相互进行了身份验证,但是我无法确定如何执行此操作。有任何帮助或指导吗?

设置好之后,下一步就是针对该服务器测试自己开发的客户端,针对来测试我们自己开发的服务器s_client我们可以将其用于测试吗?

谢谢

w

似乎您正在尝试通过(1)建立信任根s_clients_server进行测试;(2)使用OpenSSL在您的代码中以编程方式进行。


要确保openssl s_client(或openssl s_server)使用您的根目录,请使用以下选项:

  • -CAfile 指定根的选项
  • -cert 证书使用的选项
  • -key 证书私钥的选项

有关详细信息,请参见s_client(1)s_server(1)上的文档


要在客户端上以编程方式执行相同的操作,可以使用:

  • SSL_CTX_load_verify_locations 加载受信任的根
  • SSL_CTX_use_certificate 指定客户端证书
  • SSL_CTX_use_PrivateKey 加载客户端证书的私钥

要在服务器上以编程方式执行相同的操作,可以使用:

  • SSL_CTX_load_verify_locations 加载受信任的根
  • SSL_CTX_use_certificate_chain_file 指定服务器证书
  • SSL_CTX_use_PrivateKey 加载服务器证书的私钥
  • SSL_CTX_set_client_CA_list 告诉客户发送其客户证书

如果你不希望使用的参数为每个连接(即共同环境),然后将其设置为每个SSL连接,例如,SSL_use_certificateSSL_use_PrivateKey

发生了很多事情SSL_CTX_set_client_CA_list它(1)将CA加载到服务器以用于验证客户端,(2)导致服务器在验证客户端时发送其接受的CA列表,以及(3)ClientCertificate如果客户端触发了客户端消息具有满足服务器接受的CA列表的证书。

另请参阅关于SSL_CTX_load_verify_locations(3)SSL_CTX_use_certificate(3)SSL_CTX_set_client_CA_list和朋友的文档


最容易使用的证书和密钥格式是PEM。PEM是使用的一种,例如----- BEGIN CERTIFICATE -----对于服务器证书,请确保该文件是服务器证书和客户端构建链所需的任何中间件的串联。

让服务器发送所有必需的证书是解决称为“哪个目录”问题的问题的标准做法。这是PKI中的一个众所周知的问题,本质上是客户不知道去哪里获取丢失的中间证书的问题。


通常,您现在知道需要使用的功能。下载像nginx这样的小型服务器,并查看生产服务器在实践中如何使用它们。您甚至可以使用像Postgres这样的SQL服务器,因为它可以设置SSL / TLS服务器。只需在源文件中搜索SSL_CTX_load_verify_locationsSSL_load_verify_locations,您将找到正确的位置。

尽管我不建议这样做,但您甚至可以查看s_client.cs_server.c它们位于中<openssl dir>/apps但是代码有时可能很难阅读。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用OpenSSL测试SSL / TLS客户端身份验证

来自分类Dev

客户端模式下的OpenSSL:验证身份验证

来自分类Dev

Angular JS SSL客户端身份验证

来自分类Dev

Java:如何添加SSL客户端身份验证

来自分类Dev

做SSL客户端身份验证是python

来自分类Dev

使用HttpClient进行客户端身份验证

来自分类Dev

使用POCO的客户端摘要身份验证

来自分类Dev

尝试使用SmartCard进行TLS握手客户端身份验证时,handshake_failure

来自分类Dev

Ejabberd SASL外部身份验证,用于使用证书的客户端SSL身份验证

来自分类Dev

使用ruby的SSL客户端证书身份验证(Sinatra)

来自分类Dev

使用jCIFS SSL + NTLM身份验证JDK 5的Apache CXF soap客户端

来自分类Dev

如何通过身份验证方法FORM使用Jersey客户端(2.x)进行身份验证

来自分类Dev

Spring WS 客户端 — 使用 KeyStore/TrustStore 和凭据进行身份验证(基本身份验证)

来自分类Dev

SSL客户端证书/与ServiceStack的相互身份验证(HttpListener)

来自分类Dev

.NET相互SSL握手“客户端身份验证”

来自分类Dev

通过带有客户端身份验证的Nginx代理的SSL Websocket代理

来自分类Dev

用于SSL身份验证的自签名证书和客户端密钥库

来自分类Dev

如何在Java 11客户端-MongoDB 4.4(SSL)之间进行身份验证?

来自分类Dev

.NET相互SSL握手“客户端身份验证”

来自分类Dev

axis2c SSL客户端身份验证

来自分类Dev

SSL客户端证书/与ServiceStack的相互身份验证(HttpListener)

来自分类Dev

可以将任何SSL证书用于客户端证书身份验证吗?

来自分类Dev

Jboss EAP 7 - REST API 客户端的动态 SSL 身份验证

来自分类Dev

客户端使用OpenPop进行身份验证时,密码是否需要编码?

来自分类Dev

使用jax-rs和cxf进行客户端身份验证

来自分类Dev

从客户端应用程序使用Doorkeeper进行身份验证,而不传输秘密

来自分类Dev

使用CXF客户端发送BASIC身份验证凭据

来自分类Dev

使用Google OAuth 2.0对桌面客户端应用进行身份验证

来自分类Dev

如何使用客户端证书在Web API中进行身份验证和授权

Related 相关文章

  1. 1

    使用OpenSSL测试SSL / TLS客户端身份验证

  2. 2

    客户端模式下的OpenSSL:验证身份验证

  3. 3

    Angular JS SSL客户端身份验证

  4. 4

    Java:如何添加SSL客户端身份验证

  5. 5

    做SSL客户端身份验证是python

  6. 6

    使用HttpClient进行客户端身份验证

  7. 7

    使用POCO的客户端摘要身份验证

  8. 8

    尝试使用SmartCard进行TLS握手客户端身份验证时,handshake_failure

  9. 9

    Ejabberd SASL外部身份验证,用于使用证书的客户端SSL身份验证

  10. 10

    使用ruby的SSL客户端证书身份验证(Sinatra)

  11. 11

    使用jCIFS SSL + NTLM身份验证JDK 5的Apache CXF soap客户端

  12. 12

    如何通过身份验证方法FORM使用Jersey客户端(2.x)进行身份验证

  13. 13

    Spring WS 客户端 — 使用 KeyStore/TrustStore 和凭据进行身份验证(基本身份验证)

  14. 14

    SSL客户端证书/与ServiceStack的相互身份验证(HttpListener)

  15. 15

    .NET相互SSL握手“客户端身份验证”

  16. 16

    通过带有客户端身份验证的Nginx代理的SSL Websocket代理

  17. 17

    用于SSL身份验证的自签名证书和客户端密钥库

  18. 18

    如何在Java 11客户端-MongoDB 4.4(SSL)之间进行身份验证?

  19. 19

    .NET相互SSL握手“客户端身份验证”

  20. 20

    axis2c SSL客户端身份验证

  21. 21

    SSL客户端证书/与ServiceStack的相互身份验证(HttpListener)

  22. 22

    可以将任何SSL证书用于客户端证书身份验证吗?

  23. 23

    Jboss EAP 7 - REST API 客户端的动态 SSL 身份验证

  24. 24

    客户端使用OpenPop进行身份验证时,密码是否需要编码?

  25. 25

    使用jax-rs和cxf进行客户端身份验证

  26. 26

    从客户端应用程序使用Doorkeeper进行身份验证,而不传输秘密

  27. 27

    使用CXF客户端发送BASIC身份验证凭据

  28. 28

    使用Google OAuth 2.0对桌面客户端应用进行身份验证

  29. 29

    如何使用客户端证书在Web API中进行身份验证和授权

热门标签

归档