2012-02-12 8 views
1

私は自分のアプリケーションでOpenSSLを使用しようとしており、安全な接続を実現しています。Opensslの使用に関するクエリ

は、最初に私が試した:

  1. TCPソケット
  2. SSLに設定socketbioがstrcut
  3. sslbioを作成するためsocketbioを作成
  4. をSSL構造体を作成
  5. SSL_accept(ssl)
  6. BIO_push(ssl, socketbio)

これはハンドシェイクが正常に行われる原因になりますが、アプリケーションデータが正しく復号化されませんでした。

は、それから私は少し微調整し、

(new) BIO_ctrl(sslbio, SET_SSL, ssl) 

と6をrelacedと物事がうまく働きました。

私は以前のアプローチの何が問題なのか、そして新しいアプレイ作業の原因は何か知りたがっていますか?

答えて

1

なぜあなたはBIO_pushがあなたがする必要があると思うかを知らずに質問に答えることは難しいです。いずれにせよ、BIO_ctrlに直接電話するべきではありません。あなたがbio_ssl.cで見ることができるようにBIOオブジェクトの

#define BIO_set_ssl(b,ssl,c) BIO_ctrl(b,BIO_C_SET_SSL,c,(char *)ssl) 

このマクロを設定するSSLメンバー:あなたはbio.hで定義されたハイレベルのラッパーBIO_set_sslを使用する必要があります

case BIO_C_SET_SSL: 
      if (ssl != NULL) 
        ssl_free(b); 
      b->shutdown=(int)num; 
      ssl=(SSL *)ptr; 
      ((BIO_SSL *)b->ptr)->ssl=ssl; 
      bio=SSL_get_rbio(ssl); 
      if (bio != NULL) 
        { 
        if (b->next_bio != NULL) 
          BIO_push(bio,b->next_bio); 
        b->next_bio=bio; 
        CRYPTO_add(&bio->references,1,CRYPTO_LOCK_BIO); 
        } 
      b->init=1; 
      break; 

この機能の重要なステップBIO_pushではなく、BIO_SSLオブジェクトのsslポインタをアクティブSSLコンテキスト(((BIO_SSL *)b->ptr)->ssl=ssl;)に設定する場所です。説明のためにthnxメイト。

+0

はい、あなたは上記のように、ダイレクト、yを使用してset_ssl ididn't使用しないでください。 – Varun

関連する問題