0

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

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

通过使用 openssl s_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参数传递给此调用。

任何帮助深表感谢。

4

1 回答 1

1

解决方案是 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输出文件在哪里。现在,您可以my_certkey.pem在对soap_ssl_client_context().

openssl s_client像这样的工具curl会将连接的密钥证书文件理解为-cert选项的参数,并从那里同时使用密钥和证书。

于 2012-05-17T15:37:50.497 回答