Linux で OpenSSL を使用して SOAP クライアントを作成しました。基本的に、OpenSSL Web サイトやその他のオンライン リソースから情報を収集しました。次のコードは、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 通信プロセスの一部として単純に行われると想定しています。証明書の確認を怠ったことで、暗号化に関してアプリケーションのセキュリティが損なわれましたか?