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