私は自分のボックスに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
を指定する以外の方法はありますか?
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_PROTOCOL
でssl/s23_clnt.c
を探します。
いずれにせよ、Apacheエラーログを見ると、洞察が得られる場合があります。
私の場合、サイト「default-ssl」を有効にしていませんでした。 /etc/Apache2/sites-enabled
フォルダーには「000-default」のみがリストされていました。
Ubuntu 14 LTS、Apache 2.4.7でSSLサイトを有効にします。
a2ensite default-ssl
service Apache2 reload
簡単なメモ(および考えられる原因)。
Apache .confファイルで、_default_:443
などを使用して完全に正しいVirtualHost
設定を行うことができます。
しかし...ポート443もリッスンする不正な設定で有効化された.confファイルが1つでもある場合、SSLシステム全体がダウンします。
したがって、.confファイルが正しいことが確実な場合は、sites-enabled
にある他のサイトの.confファイルを無効にしてみてください。
いくつかの可能性があります。
まず、(3)を排除するために、そのポートにTelnet接続するとどうなりますか?
(3)ではないと仮定すると、ニーズに応じて、これらのエラーを無視して、-no-certificate-checkを渡すだけで問題ありません。通常、通常のブラウザ(通常はルート証明書を直接バンドルします)を使用して、問題がないかどうかを確認します。
証明書を手動で確認する場合は、openssl s_client
出力から詳細を投稿してください。または、openssl x509 -text -in /path/to/cert
を使用して、端末に出力します。
新しいEC2インスタンスをセットアップするときにこの問題が発生しました。 HTTPSをセキュリティグループに追加していないため、ポート443は開いていません。
私の場合、サーバーのDNS名が/ etc/hostsに追加され、127.0.0.1にマッピングされた結果、
SL23_GET_SERVER_HELLO:不明なプロトコル
実際のDNS名から127.0.0.1へのマッピングを削除すると、問題は解決しました。
この問題は、特定のインターネットプロバイダーからウェブサイトに電話したときの特別な場合にのみ発生しました。
ApacheのVirtualHost構成でip v4のみを構成しましたが、一部のルーターはip v6を使用し、Apache構成にip v6を追加すると問題は解決しました。
これと同じ質問に答えます。ポート443はCentosで開いていませんでした。
次のコマンドで443ポートを確認します。
Sudo lsof -i tcp:443
/ etc/httpd/conf.d/ssl.confの最初の行に、次の2行を追加します。
LoadModule ssl_module modules/mod_ssl.so
Listen 443