我正在使用TLS开发客户端/服务器应用程序。我的想法是在客户端上使用证书,以便服务器对它进行身份验证。服务器上还有另一个证书,因此客户端也可以验证它是否连接到正确的服务器。
我想先测试并使用openssls_server
和openssls_client
验证提案。
到目前为止,我已经在服务器上创建了CA私钥,还创建了根证书。使用根证书,我已经签署了两个CSR,因此我为服务器获得了一个证书,为客户端获得了一个证书。
我还在客户端上安装了客户端证书+根证书,并在服务器上安装了服务器证书+根证书。
现在,我想尝试在openssls_server
和openssl之间建立连接,s_client
并验证它们是否相互进行了身份验证,但是我无法确定如何执行此操作。有任何帮助或指导吗?
设置好之后,下一步就是针对该服务器测试自己开发的客户端,针对来测试我们自己开发的服务器s_client
。我们可以将其用于测试吗?
谢谢
似乎您正在尝试通过(1)建立信任根s_client
并s_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_certificate
和SSL_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_locations
或SSL_load_verify_locations
,您将找到正确的位置。
尽管我不建议这样做,但您甚至可以查看s_client.c
和s_server.c
。它们位于中<openssl dir>/apps
。但是代码有时可能很难阅读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句