curl с TLSv1.2 работает на клиенте, но не на сервере
На моей Ubuntu 14.04 LTS-серверы SSLv2 и SSLv3 отключены. Я запускаю разные приложения на сервере. Одно приложение должно использовать curl для подключения другого приложения, размещенного на том же компьютере.
Проблема в том, что соединение работает на моем TLS-KDE-клиенте Ubuntu 14.04, но не на самом сервере.
На сервере и клиенте работают одинаковые версии 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
Пожалуйста, укажите мне правильное направление.
2 ответа
Я проверил сервер по https://www.ssllabs.com/ssltest/ и ist говорит, что сертификат действителен и что сервер поддерживает TLS 1.2, 1.1, а также 1.0.
Вы также можете попробовать добавить --no-check-certificate в свой curl-запрос.
Я также попробовал параметр -k с curl (я думаю, что --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 моего сервера произошла неправильная конфигурация.
Это может произойти, если клиенты не поддерживают TLS 1.2. Вы можете использовать TLS 1.1 и TLS 1.0 в качестве альтернативных вариантов. Чтобы проверить правильность вашей SSL-конфигурации, используйте SSL Labs ( https://www.ssllabs.com/ssltest/). Это может помочь найти любые неправильные конфигурации.
Вы также можете попробовать добавить --no-check-certificate
в пределах вашего curl-запроса.
На другой пост, вы можете прочитать это:
Простой тест - использовать wget (или браузер) для запроса http://example.com:443/ (обратите внимание на http://, а не https://); если это работает, SSL не включен на порту 443. Для дальнейшей отладки используйте openssl s_client с параметром -debug, который непосредственно перед сообщением об ошибке сбрасывает первые несколько байтов ответа сервера, который OpenSSL не смог проанализировать. Это может помочь определить проблему, особенно если сервер не отвечает сообщением ServerHello. Чтобы увидеть, что именно ожидает OpenSSL, проверьте источник: ищите SSL_R_UNKNOWN_PROTOCOL в ssl/s23_clnt.c.
В любом случае, просмотр журнала ошибок apache также может дать некоторое представление.
Надеюсь это поможет.