gsoap java_gSOAP客户端与Java webservice在HTTPS上的通信

我正在开发一个客户服务器配对,其中服务器是基于java的,客户端是基于C++(gSOAP)的。使用HTTP可以很好地进行通信。现在我想实现一个基于HTTPS的加密通信。

因此,我遵循了gSOAP教程

创建自签名证书:一个用于客户端,一个用于webservice。

然后我使用OpenSSL转换了.pem文件,如下所示:

openssl pkcs12 -export -in Servicecert.pem -inkey Servicekey.pem -certfile cacert.pem -out Service -name "service"

此外,我还导出了x.509客户端证书,如下所示:

openssl x509 -outform der -in Clientcert.pem -out Clientcert.der

keytool -import -alias client -keystore Client -file Clientcert.der

我将这两个文件用作密钥库(服务)和信任库(客户机)

现在在客户端使用gSOAP示例代码,如下所示:

using namespace std;

int main()

{

struct soap* soap = soap_new();

soap->fsslverify = ssl_verify;

soap_register_plugin(soap, soap_wsse);

CountriesPortSoap11Proxy service("https://localhost:9443/ws");// = new CountriesPortSoap11Proxy("https://localhost:9443/ws");

_ns1__getCountryRequest* request = new _ns1__getCountryRequest;

_ns1__getCountryResponse response;

soap_ssl_init();

if (soap_ssl_client_context(soap,

SOAP_SSL_ALLOW_EXPIRED_CERTIFICATE, // requires server authentication

"Client.pem",// keyfile for client authentication to server

"password", // the keyfile password

"cacert.pem",// cafile CA certificates to authenticate the server

NULL,// capath CA directory path to certificates

NULL))

{

cout << "Zertifikat" << endl;

soap_print_fault(soap, stderr);

exit(1);

}

request->name = "Poland";

request->soap = soap;

if (soap_ssl_accept((struct soap*)soap))

cout << "ok" << endl;

else

cout << "fail" << endl;;

if(service.getCountry(request, response)==SOAP_OK)

cout << "ok" << endl;

else{

cout << "fail" << endl;

service.soap_stream_fault(std::cerr);

}

cout << response.country->currency << endl;

return 0;

}

然后我得到以下错误代码

ok

fail

SOAP 1.1 fault SOAP-ENV:Server[no subcode]

"SSL_ERROR_SSL

error:1416F086:SSL routines:tls_process_server_certificate:certificate verify failed

unable to get local issuer certificate"

Detail: SSL_connect() error in tcp_connect()

segmentation fault (Speicherabzug geschrieben)

有人知道这里出了什么问题吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值