我在Linux上編寫了一個使用OpenSSL的SOAP客戶端。我基本上從OpenSSL網站和其他在線資源收集了一些信息,下面的代碼總結了我如何將XML發送到SOAP服務器。在沒有檢查證書的情況下使用OpenSSL,但我的數據是否仍然被加密?
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通信過程的一部分。我的遺漏證書檢查是否會破壞我的應用程序在加密方面的安全性?
您是如何忽略證書檢查階段的?通過更改密碼或通過設置驗證選項或通過驗證回調?你的代碼沒有顯示。 – Jay 2012-07-23 12:34:36
@Jay我以前有一些我刪除的'SSL_get_verify_result(* ssl)'形式的代碼。我認爲這意味着我沒有驗證證書。我上面的內容正是我所做的 - 沒有別的。這是否意味着我在沒有意識到的情況下使用證書檢查? – mathematician1975 2012-07-23 12:42:42