在我的ubuntu 14.04上,LTS服务器SSLv2和SSLv3被禁用。我在服务器上运行不同的应用程序。一个应用程序需要使用curl来连接托管在同一台计算机上的另一个应用程序。
问题是,连接可以在我的ubuntu 14.04 TLS-KDE客户端上运行,但不能在我的服务器上运行。
在服务器和客户端上,正在运行相同的curl和openssl版本:
$ curl --version
curl 7.35.0 (x86_64-pc-linux-gnu) libcurl/7.35.0 OpenSSL/1.0.1f zlib/1.2.8 libidn/1.28 librtmp/2.3
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate IDN IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP
$ openssl version
OpenSSL 1.0.1f 6 Jan 2014
在客户端我得到
$ sudo curl -X HEAD -D - https://server.foobar.net:443/owncloud/remote.php/carddav/addressbooks/foobar/kontakte/
HTTP/1.1 401 Unauthorized
Date: Wed, 09 Sep 2015 04:46:55 GMT
Server: Apache
Set-Cookie: oc6c79ce288a=hcv4snboaf31v9a4nnse5g8ts3; path=/owncloud; HttpOnly
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Strict-Transport-Security: max-age=31536000; includeSubDomains
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
X-Frame-Options: Sameorigin
Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; frame-src *; img-src *; font-src 'self' data:; media-src *; connect-src *
X-Robots-Tag: none
WWW-Authenticate: Basic realm="ownCloud"
Content-Type: application/xml; charset=utf-8
我在服务器上
$ sudo curl -X HEAD -D - https://server.foobar.net:443/owncloud/remote.php/carddav/addressbooks/foobar/kontakte/
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
请指出正确的方向。
答案 0 :(得分:0)
如果客户端不支持TLS 1.2,则可能会发生这种情况。您可以使用TLS 1.1和TLS 1.0作为后备选项。要检查您的SSL配置是否有效,请使用SSL实验室(https://www.ssllabs.com/ssltest/)。这可能有助于找到任何错误的配置。
您还可以尝试在curl-request中添加--no-check-certificate
。
在另一个post上,您可以阅读:
一个简单的测试是使用wget(或浏览器)来请求 http://example.com:443(请注意http://,而不是https://);如果有效, 端口443上未启用SSL。要进一步调试此问题,请使用openssl 带有-debug选项的s_client,它位于错误消息之前 转储OpenSSL所在的服务器响应的前几个字节 无法解析。这可能有助于确定问题,尤其是如果 服务器不回答ServerHello消息。看什么 正是OpenSSL所期待的,检查来源:寻找 ssl / s23_clnt.c中的SSL_R_UNKNOWN_PROTOCOL。
在任何情况下,查看apache错误日志也可能提供一些见解。
希望这有帮助。
答案 1 :(得分:0)
我通过https://www.ssllabs.com/ssltest/检查了服务器,并且ist表示证书有效且服务器支持TLS 1.2,1.1和1.0。
您还可以尝试在curl-request中添加--no-check-certificate。
我还尝试了curl的-k选项(我认为--no-check-certificate不能与curl一起使用但是使用wget)具有相同的结果。在apache日志中我什么也看不见;我认为因为连接试图通过SSL进入。
openssl s_client -debug server.foobar.net:443/owncloud/remote.php/carddav/addressbooks/foobar/kontakte/
我得到了这个:
140093535233696:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:795:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 295 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
编辑:现在我明白了!在我的服务器的/ etc / hosts中,配置错误。