На моей 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
Пожалуйста, укажите мне правильное направление.
Это может произойти, если клиенты не поддерживают 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 также может дать некоторое представление.
Надеюсь это поможет.
Я проверил сервер 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 моего сервера произошла неправильная конфигурация.