OpenSSL (Ubuntu 12.04 で C++ で記述) を使用して SOAP クライアントを作成しましたが、現在はサーバーのセキュリティ証明書をチェックせずに動作します。これは、接続をセットアップし、証明書を確認するために使用している機能です
bool bInitialiseSSL(SSL_CTX* &ctx, SSL* &ssl, BIO* &bio)
{
ctx = SSL_CTX_new(SSLv23_client_method());
bio = BIO_new_ssl_connect(ctx);
if (bio == NULL) {
ERR_print_errors_fp(stderr);
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;
}
}
if (BIO_do_handshake(bio) <= 0) {
BIO_free_all(bio);
SSL_CTX_free(ctx);
return false;
}
X509 *cert;
bool bValid = false;
cert = SSL_get_peer_certificate(ssl);
if ( cert != NULL ) {
long res = SSL_get_verify_result(ssl);
if (res == X509_V_OK) {
bValid = true;
} else {
cout << "Error in security validation: " << res << endl;
}
X509_free(cert);
}
return bValid;
}
これは正常に動作しますが、SSL_get_verify_result の戻り値は 20 です。
X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY: ローカル発行者証明書を取得できません
OpenSSL の機能に関するドキュメントをいくつか読みましたが、特にユーザーフレンドリーではありません。多くの Web チュートリアルを見てきましたが、何が間違っているのかわかりません。証明書チェックを実装しようとする前は、私のソフトウェアは完全に機能していましたが、何をする必要があるのかわかりません。マシンで設定を構成する必要がありますか? サーバーはおそらく非常に安全なbetfairであり、有効なSSL証明書を持っていないとは信じがたい. 誰かが私が間違っていることを教えてくれたら、とても感謝しています。