faz*_*oso 16 ssl openssl client-server certificate ssl-certificate
我正在使用TLS开发客户端/服务器应用程序.我的想法是在客户端上使用证书,以便服务器对其进行身份验证.此外,服务器上还有另一个证书,因此客户端也可以验证它是否连接到正确的服务器.
我想首先测试并使用openssl s_server和openssl s_client来验证提议.
到目前为止,我已经在服务器上创建了一个CA私钥,我已经创建了一个根证书.使用根证书,我签署了两个CSR,因此我获得了一个服务器证书和一个客户端证书.
我还在客户端上安装了客户端证书+根证书,在服务器上安装了服务器证书+根证书.
我现在想要尝试在openssl s_server和openssl s_client之间建立连接,并验证它们是否相互进行了身份验证,但我无法用如何执行此操作的文档.任何帮助或任何指导?
一旦我完成了这个设置,下一步就是针对该服务器测试自己开发的客户端,并针对s_client测试我们自己开发的服务器.我们可以用它进行测试吗?
谢谢
jww*_*jww 29
看起来你正试图建立一个信任根(1)s_client并s_server进行测试; (2)使用OpenSSL以编程方式在您的代码中.
要确保openssl s_client(或openssl s_server)使用root,请使用以下选项:
-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.但有时候代码很难阅读.
| 归档时间: |
|
| 查看次数: |
42805 次 |
| 最近记录: |