LINUX.ORG.RU

nginx с клиентскими сертификатами: No required SSL certificate was sent

 , ,


1

4

Делаю по инструкции в виртуалке с дебианом: http://blog.nategood.com/client-side-certificate-authentication-in-ngi

При попытке соединения через курл, nginx говорит, что сертификат не передан:

...
<center><h1>400 Bad Request</h1></center>
<center>No required SSL certificate was sent</center>
...

Конфиг nginx:

server {
	listen 443 ssl;
	server_name localhost 10.64.224.47;

	index index.php;

	ssl_certificate /etc/nginx/cert/server/server.crt;
	ssl_certificate_key /etc/nginx/cert/server/server.nopass.key;
	ssl_client_certificate /etc/nginx/cert/ca/ca.crt;
	ssl_verify_client on;

    location / {
        root           /var/www/;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_param  VERIFIED $ssl_client_verify;
        fastcgi_param  DN $ssl_client_s_dn;
	fastcgi_param  SSL_CLIENT_SERIAL $ssl_client_serial;
	fastcgi_param  SSL_CLIENT_CERT $ssl_client_cert;
        include        fastcgi_params;
    }
}

Если сделать ssl_verify_client optional, то курл заходит, но в PHP переменные $SERVER[«VERIFIED»] NONE и остальные пустые.

В гугле находил тред, где говорилось, что может быть надо клиенту установить CN, но я пробовал пустой, IP сервера, пробовал имя сервера, всё равно приходит No required SSL certificate was sent.

Прошу помощи :)

★★★★★

Вопрос снимается, дома на генте с 1-го раза взлетело

xorik ★★★★★
() автор топика

А ты не забыл установить сертификат в браузер? При попытке подключения к nginx'у браузер должен сказать, что сервер требует сертификат, и предложить выбрать сертификат из числа установленных ( даже если установлен всего один )

Ещё устанавливай debug версию nginx'а и включай error log с debug'ом

router ★★★★★
()
Ответ на: комментарий от router

Да мне не для браузера надо было, а для curl, но на генте всё заработало с 1го раза по инструкции, а на дебиане полдня убил

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

Знаешь, что самое смешное? curl до какой-то версии криво работал с клиентским сертификатом. Года два назад наткнулся, когда бодался с клиентскими сертификатами.

Т.е. может как раз nginx у тебя работал успешно ;) А вообще error_log с уровнем debug рулит, но для этого nginx должен быть собран с --with-debug

router ★★★★★
()
Ответ на: комментарий от router

Да, и если что, на том же ip:порт у тебя не должно быть сайтов с ssl, но без сертификатов. Т.к. эта информация о допустимых CA шлётся клиенту на этапе установки ssl соединения

Возможно, в дебиане из пакета шёл ssl сайт для тестовых целей.

router ★★★★★
()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от router

curl до какой-то версии криво работал с клиентским сертификатом

Очень может быть, завтра проверю, спасибо.

xorik ★★★★★
() автор топика
Ответ на: комментарий от router

Так и есть, в маке древний курл видимо, и не умеет нормально с сертификатами работать, спасибо

xorik ★★★★★
() автор топика
Ответ на: комментарий от xorik

Проверь ещё раз. Обычно это означает, что у тебя в nginx несколько ssl сайтов на одном ip:port.

Какое-то расширение TLS позволяет передать список CA после установки защищённого соединения, но старый софт, в т.ч. curl и большинство браузеров, его не поддерживают.

router ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.