CouchDB не будет работать через SSL - PullRequest
0 голосов
/ 30 апреля 2018

Я использую контейнер CouchDB Docker , V.2.1.1. На данный момент все работает, кроме SSL. Я следую документации CouchDB по настройке SSL . Контейнер имеет OpenSSL 1.0.1t.

Как показано в документации, я использую самоподписанный сертификат. Когда я пытаюсь подключиться к странице SSL через порт 6984:

Chrome говорит мне

"ERR_CONNECTION_CLOSED".

Керл дает мне

curl -k https://localhost:6984

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:6984

В журнале сервера я получаю много всего этого.

hello terminated with reason: no function clause matching ssl_cipher:hash_algorithm

Поиск этой последней ошибки приводит к появлению информации, указывающей на наличие проблемы в версии Erlang. Тем не менее, я считаю, что контейнер CouchDB имеет уже исправленную версию. Я попытался обновить с:

apt-get install Erlang

Это не имело никакого значения. Результаты поиска также указывают на наличие проблемы с версией OpenSSL. Я обновился до OpenSSL 1.1.1 из исходного кода, воссоздал сертификаты, и проблема по-прежнему сохраняется.

По запросу, здесь выводится еще несколько команд.

openssl s_client -connect localhost: 6984

CONNECTED(00000005)
140736008328136:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/ssl/s23_lib.c:124:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 318 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
---

завиток - версия

curl 7.54.0 (x86_64-apple-darwin17.0) libcurl/7.54.0 LibreSSL/2.0.20 zlib/1.2.11 nghttp2/1.24.0
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz HTTP2 UnixSockets HTTPS-proxy

curl -k -v https://localhost:6984

* Rebuilt URL to: https://localhost:6984/
*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 6984 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:6984
* stopped the pause stream!
* Closing connection 0
curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:6984

curl -k - шифры ПО УМОЛЧАНИЮ https://localhost:6984

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:6984

curl -k - шифры ECDHE-RSA-AES256-GCM-SHA384 https://localhost:6984

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:6984

Вывод следующих трех команд очень похож. Я просто покажу разницу. Однако, похоже, что рукопожатие происходит со всеми этими командами.

$ openssl s_client -tls1 -connect localhost: 6984

CONNECTED(00000005)
SSL handshake has read 1762 bytes and written 400 bytes
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 18C5DF9DCA1B8AA0DBD33258BCD253053F8D1D91B524B0561A1C0FAB8CFB5146
    Master-Key: FD0C57E4E8FB992C0323D43930C104D82B69C4200F42E03EDB51E38A47448D62FDCB6E813583E2177A339B74B4D0CC4A
    Start Time: 1525593658
    Timeout   : 7200 (sec)

$ path / to / brew / version / of / openssl s_client -connect localhost: 6984

CONNECTED(00000003)
Peer signing digest: SHA512
Server Temp Key: DH, 1024 bits
SSL handshake has read 1796 bytes and written 537 bytes
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA256
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-SHA256
    Session-ID: A19D67CBE634843181859DB2C3C4D1A3416C9F7DAA85CF470D412FE723AD49B4
    Master-Key: 61B711B9BEDB651868607527439D01B421780C7D584FCE68C4754A7A7F3563923409C03F4B68BB7914397B48A92FC756
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1525593604
    Timeout   : 300 (sec)

$ path / to / brew / version / of / openssl s_client -tls1 -connect localhost: 6984

SSL handshake has read 1762 bytes and written 397 bytes
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 6CC7FFE1C7CE258F105C7ADD5D8A9C0DFFB26A5A9555EB218EE48E519D361208
    Master-Key: 2D6DFAC01544F6FF5F4138D877A4105485D5A2F77B58B4796822625E2E602455C38E3EEB2CBACE07FA03D207B07C715E
    Start Time: 1525593717
    Timeout   : 7200 (sec)

$ curl -k --tlsv1 https://localhost:6984

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to localhost:6984

$ curl -k --tlsv1.0 https://localhost:6984

{"couchdb":"Welcome","version":"2.1.1","features":["scheduler"],"vendor":{"name":"The Apache Software Foundation"}}

Итак, я предполагаю, что есть проблема со встроенной версией LibreSSL? Следующий вопрос: что с этим можно сделать?

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Чтобы глубже копать, вы можете опубликовать вывод следующих команд?

$ openssl s_client -connect localhost:6984

$ curl --version

$ curl -k -v https://localhost:6984

$ curl -k --ciphers DEFAULT https://localhost:6984

$ curl -k --ciphers ECDHE-RSA-AES256-GCM-SHA384 https://localhost:6984

Кстати, я заметил, что ваш curl использует LibreSSL не OpenSSL, как указано в сообщении об ошибке, которое вы получаете:

curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL в связи с локальный: 6984


При попытке открыть openssl:

$ openssl s_client -connect localhost:6984

Вы получаете эту ошибку:

СОЕДИНЕНО (00000005) 140736008328136: ошибка: 140790E5: SSL подпрограммы: SSL23_WRITE: рукопожатие ssl неудача: /BuildRoot/Library/Caches/com.apple.xbs/Sources/libressl/libressl-22.50.2/libressl/ssl/s23_lib.c: 124

Не могли бы вы сообщить о выводе этой команды:

$ openssl s_client -tls1 -connect localhost:6984

Кроме того, можно предположить, что причиной проблемы является версия LibreSSL / OpenSSL по умолчанию для macOS. Чтобы решить эту проблему, попробуйте установить OpenSSL версии brew и снова запустить эту команду, и, пожалуйста, сообщите результат:

$ path/to/brew/version/of/openssl s_client -connect localhost:6984

Также, пожалуйста, опубликуйте вывод этого:

$ path/to/brew/version/of/openssl s_client -tls1 -connect localhost:6984

На основе ваших зарегистрированных результатов, пожалуйста, попробуйте следующую команду и посмотрите, работает ли она:

$ curl -k --tlsv1 https://localhost:6984
0 голосов
/ 01 мая 2018

Если ваш SSL-сертификат самоподписан:


Вы не показали свою команду curl, но я думаю, что вы не , используя опцию -k, но вы должны:

-k, --insecure
              (TLS) By default, every SSL connection curl makes is verified to be secure. This option allows curl to proceed and operate even  for
              server connections otherwise considered insecure.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...