Я недавно обновил сертификаты SSL нашего веб-сервера, включая промежуточные сертификаты, и теперь я вижу ошибку при подключении с iPhone, которая говорит: «Произошла ошибка SSL, и невозможно установить безопасное соединение с сервером».При исследовании этой ошибки было установлено, что Perfect Forward Secrecy каким-то образом был нарушен на этом сервере.Сервер, на котором не было обновленных сертификатов, работает.
Я заглянул в реестр на сломанном сервере:
HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ SecurityProviders \ SCHANNEL
... где я не нашел ни одного шифра!На работающем сервере есть несколько опций.
Более того, когда я проверяю, что каждый сервер поддерживает с помощью openssl в командной строке, я обнаруживаю, что «хороший» сервер возвращается вообще ни с чем,и «плохой» сервер, по крайней мере, показывает несколько вещей, таких как TLS1.
Вот скрипт, который я использую для проверки шифров на данном сервере:
for v in ssl2 ssl3 tls1 tls1_1 tls1_2; do
for c in $(openssl ciphers 'ALL:eNULL' | tr ':' ' '); do
openssl s_client -connect $1:443 \
-cipher $c -$v < /dev/null > /dev/null 2>&1 && echo -e "$v:\t$c"
done
done
Требуется аргумент, имя сервера.Когда я запускаю его, скажем, на google.com, я получаю целую кучу вещей назад.Когда я запускаю его на «хорошем сервере», ничего, и когда я запускаю его на «плохом» сервере, я получаю только протоколы TLS1.
Кто-нибудь видел это раньше?Я унаследовал эти серверы после многих лет пренебрежения и знаю, что криптографическая настройка на них очень уязвима, но сейчас мне нужно просто «заставить ее работать».