1

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 通信プロセスの一部として単純に行われると想定しています。証明書の確認を怠ったことで、暗号化に関してアプリケーションのセキュリティが損なわれましたか?

4

1 に答える 1

4

あなたのデータはまだ暗号化されていますが、問題は誰に?

証明書チェックプロセスでは、相手が本人であるかどうかを確認します。誰かがSSL証明書を注文すると、証明書を配布する会社は、注文されているドメイン(または他のエンティティ)の正当な所有者に証明書とキーを確実に提供するための措置を講じます。次に、その会社は独自の詳細を使用して証明書に署名します。この詳細は、コンピューターが既に信頼している会社によって署名されます。

接続を確立すると、コンピューターはリンクをチェックして、証明書が正当であることを確認します。つまり、コンピューターが信頼する誰かによって署名されていることを確認します(おそらく、信頼の複数のレイヤーを介して間接的に)。

このプロセスをスキップすると、誰でも自分のコンピューターで特定のWebサイトの証明書を生成できるようになります。その後、彼らがあなたが作った接続を乗っ取ることができると仮定すると、彼らはあなたのシステムにそれが有名な会社であると簡単に信じさせることができます。

安全であるためには、証明書を確認する必要があります。

于 2012-07-23T12:32:05.013 に答える