c-使用gSOAP进行相互SSL身份验证



我正在尝试连接需要相互SSL身份验证的SOAP服务。

我们创建了一个自签名证书,并将其传输给服务运营商,以便他们验证我们的连接。同样,他们给我们发了一份ssl证书的副本。

通过使用openssls_client并手动输入HTTP请求、标头和SOAP内容,我已经能够成功地连接到一个从服务获得预期的SOAP响应。我使用与以下类似的参数来成功连接:

openssl s_client -connect example.com:443 -key my_key.pem -cert my_cert.pem -pass file:my_passphrase
  • my_key.pem是我的私钥的文件名
  • my_cert.pem是转发给服务操作员的自签名证书的文件名
  • my_passphrase包含私钥的密码短语

我现在正尝试使用gSOAP及其C绑定来访问同一服务。我在http://www.cs.fsu.edu/~engelen/soapdoc2.html从服务WSDL创建绑定,并添加了对soap_ssl_client_context()的调用以设置SSL连接,但我遇到了一个问题。

我假设我应该使用my_key.pem的路径作为keyfile参数,但使用gdb,我可以看出是对SSL_CTX_use_certificate_chain_file()的调用失败了。gSOAP将keyfile参数作为file参数传递给此调用。

非常感谢您的帮助。

解决方案是gSOAP希望证书和密钥位于同一文件中。

来自gSOAP文档中的SSL证书和密钥文件:

密钥文件(client.pem和server.pem)是通过连接私钥pem和证书pem来创建的。

您可以通过将两个文件串联来实现这一点。这使用Unix工具cat非常简单。在shell提示下,使用与问题中相同的文件名:

$ cat my_cert.pem my_key.pem > my_certkey.pem

其中my_certkey.pem是输出文件。现在,您可以在对soap_ssl_client_context()的调用中使用my_certkey.pem的路径作为keyfile参数。

openssl s_clientcurl这样的工具将把连接的密钥证书文件理解为-cert选项的参数,并从中同时使用密钥和证书。

最新更新