我在 Linux 上使用 OpenSSL 编写了一个 SOAP 客户端。我基本上从 OpenSSL 网站和其他在线资源收集了一些信息,以下代码总结了我如何将 XML 发送到 SOAP 服务器。
SSL_library_init();
SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
SSL_CTX* ctx = SSL_CTX_new(SSLv23_client_method());
SSL* ssl;
BIO* bio = BIO_new_ssl_connect(ctx);
if (bio == NULL) {
SSL_CTX_free(ctx);
return false;
}
BIO_get_ssl(bio, &ssl);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
char target[] = "api.betfair.com:https";
BIO_set_conn_hostname(bio, target);
BIO_set_nbio(bio,1);
while (1) {
if (BIO_do_connect(bio) <= 0) {
if (!BIO_should_retry(bio)) {
cout << "Connect failed." << endl;
BIO_free_all(bio);
SSL_CTX_free(ctx);
return false;
}
} else {
break;
}
}
KeepAliveReq KeepAliveReq(sessionTok,0,iMode);
string strMessage = KeepAliveReq.GetXML(false);
BIO_puts(bio,strMessage.c_str());
这工作得很好,并且已经可靠(如果有点慢)几个星期了。我故意省略了 SSL 握手过程的证书检查阶段,因为当时我并没有真正了解它的细节,而且我发送到的服务器是一家知名公司的。我的问题是我可以假设我的数据是否被 SSL 代码加密?据我从我的代码中可以看出,我没有明确要求进行加密,我假设这只是作为 SSL 通信过程的一部分发生。我的证书检查遗漏是否损害了我的应用程序在加密方面的安全性?