#nginx #ssl #openssl
#nginx #ssl #openssl
Вопрос:
я пытаюсь запустить сервер, используя Nginx с поддержкой sslv3 и шифров RC4-SHA: поддержка RC4-MD5 (мне нужны именно эти шифры). Я смог сделать это в Ubuntu 16.04, используя исходный код Openssl 1.0.2u последний исходный код версии nginx (nginx-1.19.6). Я создал Nginx с помощью этой команды:
./configure --with-http_ssl_module --with-openssl=/path/to/openssl-1.0.2u --with-openssl-opt=enable-ssl3 --with-openssl-opt=enable-ssl3-method --with-openssl-opt=enable-weak-ssl-ciphers
Конфигурация Nginx, которую я использовал, является:
server {
listen 443 ssl;
listen [::]:443 ssl;
ssl_protocols SSLv3;
ssl_ciphers RC4-SHA:RC4-MD5:@SECLEVEL=0;
ssl_certificate /path/to/server-chain.crt;
ssl_certificate_key /path/to/server.key;
server_name server.name.net;
underscores_in_headers on;
proxy_pass_request_headers on;
location / {
proxy_set_header X-Forwarded-Host $host:$server_port;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:9000;
}
}
После настройки конфигурационного файла nginx все работало отлично. Я смог получить сертификат ssl с помощью этой команды с компьютера Ubuntu 14.04:
openssl s_client -connect MyIP:443 -ssl3 -cipher RC4-SHA:RC4-MD5
.
Я попытался сделать то же самое, создав Nginx с помощью Openssl 1.1.1. я использую те же параметры конфигурации, но после настройки файла nginx conf, когда я пытаюсь запустить openssl s_client -connect...
команду, я получаю эту ошибку:
CONNECTED(00000003)
140420793624224:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:s3_pkt.c:339:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 7 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : SSLv3
Cipher : 0000
Session-ID:
Session-ID-ctx:
Master-Key:
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1612540521
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
В файле Nginx error.log я получил следующее:
SSL_do_handshake() failed (SSL: error:141FC044:SSL routines:tls_setup_handshake:internal error) while SSL handshaking, client: 192.168.1.10, server: 0.0.0.0:443
Что-то изменилось с openssl 1.1.1? Мне не хватает каких-либо параметров конфигурации для включения SSLv3 RC4-SHA: RC4-MD5?
Спасибо за любые советы!
Ответ №1:
В конце концов я смог это исправить!
Я загрузил последний исходный код openssl (1.1.1i) и последний исходный код nginx (1.19.6). Я скомпилировал и установил openssl со следующими командами:
./config enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers
make
sudo make install
Я отредактировал файл openssl.cnf (/usr/local/ssl/openssl.cnf), добавив
openssl_conf = default_conf
в начале файла и добавление
[default_conf]
ssl_conf = ssl_sect
[ssl_sect]
system_default = system_default_sect
[system_default_sect]
CipherString = ALL:@SECLEVEL=0
в нижней части файла. Это позволяет использовать старые шифры (мне нужны были RC4-SHA и RC4-MD5).
Затем я скомпилировал и установил nginx со следующими командами:
./configure --with-http_ssl_module --with-ld-opt="-L/usr/local"
make
sudo make install
После настройки nginx для ssl-сертификатов я смог получить их с помощью openssl s_client...
команды!
Ответ №2:
Шифры SSL в nginx должны поддерживаться вашей версией OpenSSL. Из списка изменений OpenSSL 1.0.2h и 1.1.0:
Шифры libssl на основе RC4 теперь классифицируются как «слабые» шифры и по умолчанию отключены. Их можно повторно включить, используя опцию enable-weak-ssl-ciphers для настройки.
Комментарии:
1. Я скомпилировал nginx с openssl, используя enable-weak-ssl-ciphers (написал полную команду выше). Я также добавил @SECLEVEL=0 в строку ssl_chipers. Я не могу понять, что я делаю не так
2. О, извините! Я так не думал, потому что в вашей команде была ссылка 1.0.2, и я даже не смог скомпилировать недавний nginx с этими флагами (из-за отсутствия
pcre
иzlib
в моей лаборатории). Я только что скомпилировал ту же конфигурацию (1.19.6 openssl 1.1.1), а также не могу получить результат с помощью-connect
1.0.2g
openssl на ubuntu ubuntu (последние версии даже не принимаются-ssl3
) — с другой ошибкой на стороне SSL, но такой же на стороне nginx. Также sslyze не смог найти соответствующий шифр, что необычно…3. Чтобы исправить prce и zlib, просто запустите это:
sudo apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev
4. Я связал их вручную, поскольку я сам компилирую nginx на регулярной основе. Вот почему я подумал, что «это может быть простой способ» — это не так 😉 Все еще понятия не имею, в чем может быть проблема.
5. Копаясь на странице nginx, на которую вы ссылались выше, я нашел эту страницу: openssl.org/docs/man1.1.1/man3/SSL_CTX_set_security_level.html В Примечаниях говорится о опции -DOPENSSL_TLS_SECURITY_LEVEL=level . Я пытался использовать его (= 0), но старые шифры полностью исчезли с ним…