Я запускал API для себя через прокси-сервер nginx, у меня не было проблем с ним до сегодняшнего дня, когда я переиздал его сертификат. Сертификат от Let's Encrypt, я создал файл, который я предоставляю nginx bundle клиентского, промежуточного и корневого сертификатов.
Я могу получить доступ к API просто без предупреждений в браузере, но в ноде я получаю UNABLE_TO_VERIFY_LEAF_SIGNATURE
, а в python Cannot connect to host api.furry.bot:443 ssl:None [[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)]
Nginx config для ssl:
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
ssl_certificate /etc/ssl/main.chained.crt;
ssl_certificate_key /etc/ssl/main.key;
ssl_ciphers HIGH:!aNULL:!MD5;
Ключ соответствует первому сертификату в цепочке, а файл структурирован
сертификат сервера
промежуточный сертификат
корневой сертификат
[ 118]
Я не могу заставить его работать должным образом, я не хочу просто отключить проверку ssl в моем приложении узла, и я не могу правильно редактировать реализацию python, у меня такое ощущение, что это не так не получаю промежуточный и корневой сертификаты должным образом, но я понятия не имею.
Серверы, к которым обращается nginx, являются серверами экспресс-узлов и одним флеш-сервером (который не имеет отношения к этому).
Конфигурация для рассматриваемого сайта (все остальные конфиги в основном одинаковые, за исключением, конечно, default_server):
server {
listen 443 default_server ssl;
listen [::]:443 default_server ipv6only=on ssl;
server_name furry.bot *.furry.bot;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
ssl полностью на стороне nginx, все за кулисами HTTP.
В итоге я решил это путем привязки моего личного сертификата к промежуточному сертификату центра сертификации. (Раньше я делал это в неправильном порядке)
Например, у меня есть сертификат сайтов и промежуточный сертификат.
Поэтому я объединяю их вместе в связанный сертификат, помещая сайт один над промежуточным, вот так, и теперь нет ошибок UNABLE_TO_VERIFY_LEAF_SIGNATURE
.