Apache 旋度返回“;未知协议“;

Apache 旋度返回“;未知协议“;,apache,curl,ssl,Apache,Curl,Ssl,尽管谷歌上有很多搜索结果,但似乎没有一个给出答案。我有一个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 certifica

尽管谷歌上有很多搜索结果,但似乎没有一个给出答案。我有一个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
我的virtualhost配置为(片段):

SSLEngine打开
SSLProtocol all-SSLv2
SSLCipherSuite全部:!ADH:!出口:!SSLv2:RC4+RSA:+HIGH:+MEDIUM
SSLCertificateFile/etc/apache2/ssl.key/xxx/ssl.cert
SSLCertificateKeyFile/etc/apache2/ssl.key/xxx/xxx.xxx.key
#服务器证书链:
SSLCertificateChainFile/etc/apache2/ssl.key/sub.class1.server.ca.pem
#证书颁发机构(CA):
SSLCACertificateFile/etc/apache2/ssl.key/ca.pem
发展+标准
发展+标准
浏览器匹配“MSIE[2-6]”\
nokeepalive ssl不干净关闭\
降级-1.0力响应-1.0
#MSIE 7和更新版本应该能够使用keepalive
BrowserMatch“MSIE[17-9]”ssl不干净关闭
任何帮助都将不胜感激

编辑:更新 我想我发现了我自己的问题

虚拟主机已绑定到外部接口,curl正在尝试通过localhost进行连接。因此,它从未在配置的虚拟主机上结束

为了解决这个问题,我创建了一个绑定到127.0.0.1:80的新VirtualHost条目,它只允许从localhost进行连接。就我而言,这就足够了。

这里还有一个答案:

您的服务器正在使用过时的SSLv2。。。您可以在手册页中尝试此功能:

curl https://localhost/api/v1/status --verbose --sslv2

虽然OP的情况并非如此,但当您不小心尝试使用HTTPS调用HTTP服务器时(通常在本地开发期间),会出现cURL中的错误“Unknown protocol”。
如果有人在谷歌上搜索到这个错误并在这里登陆,请提一下

curl:(35)错误:140770FC:SSL例程:SSL23\u GET\u SERVER\u HELLO:未知协议

我的curl也有这个问题,结果是我的环境变量有问题

通常,您可以使用
http\u proxy
https\u proxy
环境变量指定代理,但我无意中为
https\u proxy
使用了错误的值

就我而言,我有:

http_proxy=http://a.b.c.d:3128/
https_proxy=https://a.b.c.d:3128/
这是错误的,因为(至少在我的情况下)https\u代理不应该使用https协议,它应该与http\u代理相同。一旦我将两个代理环境变量都设置为仅使用
http://a.b.c.d:3128/
一切又恢复了正常

因此,如果这有助于其他人,请尝试:

http_proxy=http://a.b.c.d:3128/
https_proxy=http://a.b.c.d:3128/ # NOT HTTPS

哇,这样一个随机错误消息,谢谢它解决了我的问题@Elad我如何检查是否是这种情况?我的本地主机“似乎”是HTTPS,我可以通过它访问,但在Chrome中有一个无效的证书警告。我遇到的错误是当我点击API调用的回调URL时。@RobrechtVM-没有什么可检查的。当您的服务器处于打开状态时会发生此情况
http://localhost:1234
然后运行
curlhttps://localhost:1234
。我不确定我是否理解这个问题。我想一个相关的问题会回答你的问题。这可能比我自己在这里输入答案要快:在阅读其他答案之前,仔细看一下第一个答案。希望这有帮助。我也遇到了类似的问题,这解决了我的问题。我用的是Squid代理。但我无法理解这背后的逻辑。你能解释一下吗?
http_proxy=http://a.b.c.d:3128/
https_proxy=http://a.b.c.d:3128/ # NOT HTTPS