2017-04-16 24 views
2

SNIを使用して1台のサーバー上で100のHTTPSサービスを実行しています。私が知っているのは、ドメイン名がN.xxx.yyで、Nの範囲が00から99までです。)割り当ての目標は、それぞれの接続ごとのセキュリティを評価することです(実際には、私はアクセス権がありません。これらのサーバーのしたがって、一部のサーバに期限切れの証明書、間違ったCNを持つ証明書などが含まれています。OpenSSL接続:アラート内部エラー

私の問題は、一部のサーバでハンドシェイクを通過できないことです。私はOpenSSLを使ってC++で独自のアプリケーションを書いていますが、openssl s_clientで試してみました。

openssl s_client -host N.xxx.yy -port 443 -verify 1 -servername N.xxx.yy -CAfile assignment-ca.pem 

そして、これは私が得るものです::これは私がサーバーに接続する方法である

のWiresharkで
139625941858168:error:14094438:SSL routines:ssl3_read_bytes:tlsv1 alert internal error:s3_pkt.c:1493:SSL alert number 80 
139625941858168:error:140790E5:SSL routines:ssl23_write:ssl handshake failure:s23_lib.c:177: 

、私はクライアントがClientHelloを送ったことがわかり、サーバは(TLSv1.2を選択し、ServerHelloで対応しましたECDHE-RSA-AES256-GCM-SHA384)、Certificateが続き、Internal Error (80)を含むAlertというメッセージが送付されました。

別のものを試した後、s_client-tls1または-tls1_1と実行すると、正常にハンドシェイクを通過できることがわかりました。 -tls1_2は機能しません。 TLSv1.2がネゴシエートされていても、Chrome/Firefox /他のブラウザ経由での接続が成功するということは、見知らぬ人でもあります。私が見るところでは、Chromeは私と別の暗号リスト(s_client)を送信していますが、暗号リストをChromeのものと一致するように変更した後でも(サーバーがECDHE-RSA-AES128-GCM-SHA256を選択していることを確認しても) Chromeは私にはないが、それらのほとんどは空のように見えるこれらのTLS拡張を、送信されます。

Unknown 47802 
renegotiation_info 
Extended Master Secret 
signed_certificate_timestamp 
status_request 
Application Layer Protocol Negotiation 
channel_id 
Unknown 6682 

誰もがここで何が起こっているのか私に説明できますか?残念ながら、私はサーバー側でそれをデバッグする方法がないので、これは私が知っているすべてです。

UPDATE:

私はsignature_algorithms内線にそれを追跡するために管理偽造ClientHelloメッセージで遊んで後。私のアプリとs_clientSHA384 + {RSA,DSA,ECDSA}を提供していますが、これを削除してSHA256 + {RSA,DSA,ECDSA}のままにしておくと、Chromeが動作するようになり、Server Key Exchangeメッセージが正常に受信されます。サーバーが何らかの形でそれをサポートしていない可能性がありますが、意味のあるエラーメッセージを提供するのではなく、予期せず終了し、この内部エラーが出ます。

UPDATE 2:

は、私はそれはRFC5246で1.2より前のTLSのバージョンで動作する理由に対する答えを見つけました。前回のUPDATEからの質問はまだ成立しています。

Note: this extension is not meaningful for TLS versions prior to 1.2. 
    Clients MUST NOT offer it if they are offering prior versions. 
    However, even if clients do offer it, the rules specified in [TLSEXT] 
    require servers to ignore extensions they do not understand. 
+0

コードを共有することは可能でしょうか?私は同様の問題に直面しているので、私は別のプログラムでそれを再現したい。あなたのコードが参考になるかもしれません。 –

答えて

0

あなたは-tls1_2 does not workは、私はあなたと/またはサーバのどちらかが古いOpenSSLライブラリを使用すると仮定していることを書いたので。これを書いている間、現在のバージョンは1.1.0eです

古いシステムでよく見られる0.9.8からかなりの修正がありました。たぶん

`Some servers which support TLS 1.0 can choke if we initially indicate 
support for TLS 1.2 and later renegotiate using TLS 1.0 in the RSA 
encrypted premaster secret. As a workaround use the maximum permitted 
client version in client hello, this should keep such servers happy 
and still work with previous versions of OpenSSL.` 

notable

Don't allow TLS 1.2 SHA-256 ciphersuites in TLS 1.0, 1.1 connections.

だから私はあなたのopenssl-バージョンとケースにを更新することをお勧めあなたの問題のように聞こえるこの修正プログラムは、ありましたVersion 1.0.1については

あなたが既に見つけた設定に固執します。

関連する問題