2016-11-01 48 views
2

libest(client-simple)の例をコンパイルして実行しようとしています。そのために、私はWindows上でOpenSSLをコンパイルし、コンパイルしてlibestにリンクしました。だけでなく、OpenSSL 1.0.2とエラー "SSL_CTX_new:ライブラリに暗号がありません"

enter image description here

デバッガのコードを見ると、私はOPENSSL_add_all_algorithms_noconfが呼び出されることを確認することができます:

問題は、私がプログラムを実行すると、私はerror:140A90A1:SSL routines:SSL_CTX_new:library has no ciphersが得るということです

  • ERR_load_crypto_strings()
  • ENGINE_load_builtin_engines();
  • SSL_library_init();不足している可能性がありますどのよう
  • SSL_load_error_strings();

/OpenSSLは暗号スイートを見つけることができるように設定する必要がありますか? openSSLの.libと.dllと同時にビルドしたopenSSL.exeを実行すると、多くの多くの暗号がリストされます。

エラーの原因となっている実際の呼び出しはSSL_CTX_new(SSLv23_client_method()))です。しかし、クライアントメソッドを変更しても変更されません。

エラーが発生したのはなぜですか。どのように修正できますか?

+0

あなたがリストした通話の順序についてはわかりません。 OpenSSL wikiの[Library Initialization](https://wiki.openssl.org/index.php/Library_Initialization)も参照してください。 – jww

答えて

1

TLS 1.1以上を使用する必要があります。また、おそらくサーバー名表示(SNI)が必要です。 SNIは-servername以下に登録されています。

問題がどこにあるかを伝えるために、より多くのコードを参照する必要があります。その間、OpenSSL wikiのSSL/TLS Clientにアクセスしてください。 (現時点でサイトがメンテナンスを行っているようですが、アーカイブされたバージョンはthe Wayback machineです)。

TLS 1.2

$ openssl s_client -connect testrfc7030.cisco.com:9443 -servername testrfc7030.cisco.com -tls1_2 
... 
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-GCM-SHA384 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
No ALPN negotiated 
SSL-Session: 
    Protocol : TLSv1.2 
    Cipher : ECDHE-RSA-AES256-GCM-SHA384 
    Session-ID: B04740547F80E8F8BFC1B966D28C861F590E7ABB31202E2ED343EFDBA1A08867 
    Session-ID-ctx: 
    Master-Key: C6EF3571832C482E1293E78B0410E544140182858A91DDE16FD32CF248D442673C47C902A560A541B1D6C417E35DF804 
    PSK identity: None 
    PSK identity hint: None 
    SRP username: None 
    Start Time: 1478031623 
    Timeout : 7200 (sec) 
    Verify return code: 20 (unable to get local issuer certificate) 
    Extended master secret: no 

TLS 1.1

$ openssl s_client -connect testrfc7030.cisco.com:9443 -servername testrfc7030.cisco.com -tls1_1 
... 
New, SSLv3, Cipher is ECDHE-RSA-AES256-SHA 
Server public key is 2048 bit 
Secure Renegotiation IS supported 
No ALPN negotiated 
SSL-Session: 
    Protocol : TLSv1.1 
    Cipher : ECDHE-RSA-AES256-SHA 
    Session-ID: 62324F8BE5178E801F76B4737DD9F711AC0072E885B8748BB5B8F3ED3D16C8DE 
    Session-ID-ctx: 
    Master-Key: 4E44928C5E395E80AEF02533DAA0D237C58B5153CCCA16150B2DEDE361043BFB69D534F52A203084871F1683BDB241EF 
    PSK identity: None 
    PSK identity hint: None 
    SRP username: None 
    Start Time: 1478031773 
    Timeout : 7200 (sec) 
    Verify return code: 20 (unable to get local issuer certificate) 
    Extended master secret: no 

TLS 1.0

$ openssl s_client -connect testrfc7030.cisco.com:9443 -servername testrfc7030.cisco.com -tls1 
CONNECTED(00000003) 
write:errno=54 
--- 
no peer certificate available 
... 
New, (NONE), Cipher is (NONE) 
Secure Renegotiation IS NOT supported 
No ALPN negotiated 
SSL-Session: 
    Protocol : TLSv1 
    Cipher : 0000 
    Session-ID: 
    Session-ID-ctx: 
    Master-Key: 
    PSK identity: None 
    PSK identity hint: None 
    SRP username: None 
    Start Time: 1478031817 
    Timeout : 7200 (sec) 
    Verify return code: 0 (ok) 
    Extended master secret: no 
1

私のtcpクライアントで同じ問題に直面していました。 だから、githubのコードで同じエラーが発生していないかどうかを調べてみることができました。私は自分のコードの行を導入しました。その後SSL TCP-Server

レポリンク

$ SSL_library_init();

この行は私の問題を解決しました。 ここに私のコードを見つけることができます: TCP Client-Server with Open SSL

関連する問題