Googleには多くの結果がありますが、どれも答えを出していないようです。私はこれを行うDebianボックスを持っています:
# curl https://localhost/api/v1/status --verbose
* About to connect() to localhost port 443 (#0)
* Trying ::1...
* connected
* Connected to localhost (::1) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Closing connection #0
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
未知のプロトコルの事に合格することはできません。 -ssl -sslv3を試しましたが、どこにも行きません。実際、-sslv3を使用すると、少し異なる結果が得られます。
s# curl https://localhost/api/v1/status --verbose -sslv3
* About to connect() to localhost port 443 (#0)
* Trying ::1...
* connected
* Connected to localhost (::1) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
* Closing connection #0
私の仮想ホストは次のように構成されています(フラグメント):
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile /etc/Apache2/ssl.key/xxx/ssl.cert
SSLCertificateKeyFile /etc/Apache2/ssl.key/xxx/xxx.xxx.key
# Server Certificate Chain:
SSLCertificateChainFile /etc/Apache2/ssl.key/sub.class1.server.ca.pem
# Certificate Authority (CA):
SSLCACertificateFile /etc/Apache2/ssl.key/ca.pem
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory /usr/lib/cgi-bin>
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-6]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
# MSIE 7 and newer should be able to use keepalive
BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
どんな助けも大歓迎です。
編集:更新私は自分の問題を見つけたと思います!
仮想ホストは外部インターフェースにバインドされており、curlはlocalhost経由で接続しようとしていました。そのため、構成された仮想ホストで終了することはありませんでした。
これを修正するために、localhostからの接続のみを許可する127.0.0.1:80にバインドされた新しいVirtualHostエントリを作成しました。私の目的には、これで十分です。
OPの場合ではありませんが、通常ローカル開発中に、誤ってHTTPSを使用してHTTPサーバーを呼び出そうとすると、cURLにエラー「不明なプロトコル」が表示されます。
誰かがこのエラーをグーグルで見つけてここに着く場合に言及してください。
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Curlでもこの問題が発生しましたが、環境変数に問題があることがわかりました。
通常、http_proxy
およびhttps_proxy
環境変数を使用してプロキシを指定できますが、誤ってhttps_proxy
の値を使用していました。
私の場合、私は持っていた:
http_proxy=http://a.b.c.d:3128/
https_proxy=https://a.b.c.d:3128/
(少なくとも私の場合は)https_proxy
はHTTPSプロトコルを使用してはならず、http_proxy
と同じである必要があるため、これは間違っていました。両方のプロキシ環境変数をhttp://a.b.c.d:3128/
のみを使用するように設定したら、すべてが再び機能しました。
したがって、これが他の人を助ける場合、試してください:
http_proxy=http://a.b.c.d:3128/
https_proxy=http://a.b.c.d:3128/ # NOT HTTPS
また、ここでの答え: node-request-エラー「SSL23_GET_SERVER_HELLO:unknown protocol」を取得
サーバーは古いSSLv2を使用しています... manページにあるようにこれを試すことができます:
curl https://localhost/api/v1/status --verbose --sslv2