web-dev-qa-db-ja.com

SSL接続を確立できません。SSL証明書を修正するにはどうすればよいですか?

私は自分のボックスにwgetをしようとしていますが、wgetの内部アドレスにすることはできません(別の開発者は言います)。

取得すると、次のようになります。

wget http://example.com
--2013-03-01 15:03:30--  http://example.com/
Resolving example.com... 172.20.0.224
Connecting to example.com|172.20.0.224|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://www.example.com/ [following]
--2013-03-01 15:03:30--  https://www.example.com/
Resolving www.example.com... 172.20.0.224
Connecting to www.example.com|172.20.0.224|:443... connected.
OpenSSL: error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Unable to establish SSL connection.

証明書が適切に設定されていないからだと思います。 opensslを使用:

openssl s_client -connect example.com:443
CONNECTED(00000003)
15586:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:588:

一方、別のサイトで同じコマンドを実行すると、証明書全体が表示されます。

おそらく、SSL証明書はそのドメインのApacheのconfファイルでセットアップされなかったのでしょうか?

その場合、仮想ホストで何を指定する必要がありますか? --no-check-certificateを指定する以外の方法はありますか?

57
meder omuraliev

SSL23_GET_SERVER_HELLO:不明なプロトコル

このエラーは、OpenSSLがサーバーから認識しているプロトコルバージョンでServerHello以外のものを受信したときに発生します。サーバーがプレーンな(暗号化されていない)HTTPで応答する場合に発生する可能性があります。サーバーがサポートしているのは、たとえばTLS 1.2とクライアントはそのプロトコルバージョンを理解しません。通常、サーバーは少なくともSSL 3.0/TLS 1.0と下位互換性がありますが、この特定のサーバーは(実装または構成によって)互換性がない可能性があります。

--no-check-certificateを渡そうとしたかどうかは不明です。それがうまくいくなら、私はむしろ驚かれることでしょう。

簡単なテストは、wget(またはブラウザー)を使用してhttp://example.com:443を要求することです(http://ではなく、https://に注意してください)。これが機能する場合、ポート443でSSLは有効になりません。これをさらにデバッグするには、openssl s_client-debugオプションとともに使用します。これは、特にサーバーがServerHelloメッセージで応答しない場合に、問題を特定するのに役立ちます。 OpenSSLが正確に何を期待しているかを確認するには、ソースを確認してください:SSL_R_UNKNOWN_PROTOCOLssl/s23_clnt.cを探します。

いずれにせよ、Apacheエラーログを見ると、洞察が得られる場合があります。

87

私の場合、サイト「default-ssl」を有効にしていませんでした。 /etc/Apache2/sites-enabledフォルダーには「000-default」のみがリストされていました。

Ubuntu 14 LTS、Apache 2.4.7でSSLサイトを有効にします。

a2ensite default-ssl
service Apache2 reload
19
angularsen

簡単なメモ(および考えられる原因)。

Apache .confファイルで、_default_:443などを使用して完全に正しいVirtualHost設定を行うことができます。

しかし...ポート443もリッスンする不正な設定で有効化された.confファイルが1つでもある場合、SSLシステム全体がダウンします。

したがって、.confファイルが正しいことが確実な場合は、sites-enabledにある他のサイトの.confファイルを無効にしてみてください。

10
Nostalg.io

いくつかの可能性があります。

  1. ワークステーションには、サーバーの証明書の署名に使用されるルートCA証明書がありません。どの程度正確に修正するかは、実行しているOSやリリースなどによって異なります。 (これは関連していないと思われます)
  2. 証明書が正しくインストールされていません。 SSL証明書で中間証明書を提示する必要があり、それを設定していない場合、これらの警告を受け取ることができます。
  3. ポート443でSSLを有効にしましたか?

まず、(3)を排除するために、そのポートにTelnet接続するとどうなりますか?

(3)ではないと仮定すると、ニーズに応じて、これらのエラーを無視して、-no-certificate-checkを渡すだけで問題ありません。通常、通常のブラウザ(通常はルート証明書を直接バンドルします)を使用して、問題がないかどうかを確認します。

証明書を手動で確認する場合は、openssl s_client出力から詳細を投稿してください。または、openssl x509 -text -in /path/to/certを使用して、端末に出力します。

4
Dave S.

新しいEC2インスタンスをセットアップするときにこの問題が発生しました。 HTTPSをセキュリティグループに追加していないため、ポート443は開いていません。

2
Steve Ellis

私の場合、サーバーのDNS名が/ etc/hostsに追加され、127.0.0.1にマッピングされた結果、

SL23_GET_SERVER_HELLO:不明なプロトコル

実際のDNS名から127.0.0.1へのマッピングを削除すると、問題は解決しました。

1
Kirill Oficerov

この問題は、特定のインターネットプロバイダーからウェブサイトに電話したときの特別な場合にのみ発生しました。

ApacheのVirtualHost構成でip v4のみを構成しましたが、一部のルーターはip v6を使用し、Apache構成にip v6を追加すると問題は解決しました。

0
masoud2011

これと同じ質問に答えます。ポート443はCentosで開いていませんでした。

次のコマンドで443ポートを確認します。

Sudo lsof -i tcp:443

/ etc/httpd/conf.d/ssl.confの最初の行に、次の2行を追加します。

LoadModule ssl_module modules/mod_ssl.so
Listen 443
0
GeekHades