Перейти к содержимому

No required ssl certificate was sent как исправить

  • автор:

Авторизация пользователей с помощью SSL сертификата NGINX?

Стоит такая задача: есть сайт site.com на нем установлен ssl сертификат от godaddy , поднят суб домен simple.site.com , вот как раз для суб домена simple.site.com нужно сделать доступ только при наличии ssl сертификата который я генерирую на сервере (Пытался сделать по этой статье, все безуспешно https://habrahabr.ru/post/213741/).
Еще такой момент, много комментариев почитал , наткнулся на то что nginx не может так разруливать , в общем беда какая то второй день пытаюсь сделать такой доступ но при курле выдает ошибку : 400 Bad Request

No required SSL certificate was sent

  • Вопрос задан более трёх лет назад
  • 1178 просмотров

nginx проблемы с авторизацией по сертификату

nginx 1.6.2, самоподписанные сертификаты сервера и клиента, openssl проверку проходят:

$ openssl verify -CAfile server/server.crt client01.crt client01.crt: C = RU, ST = Moscow, L = Moscow, O = Companyname, OU = User, CN = etc, emailAddress = support@site.com error 18 at 0 depth lookup:self signed certificate OK 

А при запросе nginx отвечает ошибкой 400 The SSL certificate error

В логах сервера:

2016/04/22 11:16:20 [info] 1465#0: *35 client SSL certificate verify error: (18:self signed certificate) wh ile reading client request headers, client: 192.168.2.11, server: _, request: "GET /test HTTP/1.1", host: " 192.168.2.6" 2016/04/22 11:16:20 [debug] 1465#0: *35 http finalize request: 495, "/test?" a:1, c:1 2016/04/22 11:16:20 [debug] 1465#0: *35 event timer del: 8: 1461313040230 2016/04/22 11:16:20 [debug] 1465#0: *35 http special response: 495, "/test?" 2016/04/22 11:16:20 [debug] 1465#0: *35 http set discard body 2016/04/22 11:16:20 [debug] 1465#0: *35 echo header filter, uri "/test?" 2016/04/22 11:16:20 [debug] 1465#0: *35 xslt filter header 2016/04/22 11:16:20 [debug] 1465#0: *35 posix_memalign: 0000000001F02580:4096 @16 2016/04/22 11:16:20 [debug] 1465#0: *35 HTTP/1.1 400 Bad Request 
server < listen 443 ssl; listen [::]:443 ssl; ssl on; ssl_certificate /etc/nginx/ssl/server.crt; ssl_certificate_key /etc/nginx/ssl/server.nopass.key; ssl_client_certificate /etc/nginx/ssl/ca.crt; ssl_verify_client on; location < proxy_pass http://192.168.2.6:9080; >> 

Я правильно понимаю, что серверу не нравится то, что сертификат самоподписанный? Как разрешить?

vvn_black ★★★★★
22.04.16 11:39:47 MSK

Вот это результата не дало:

ssl_trusted_certificate /etc/nginx/ssl/ca.crt; 

Работает с ssl_verify_client optional_no_ca; , но результат не тот, что хотелось бы $ssl_client_verify=’FAILED’

vvn_black ★★★★★
( 22.04.16 13:02:08 MSK ) автор топика

Есть возможность получить сертификат от LetsEncrypt?

nite2kk8
( 24.04.16 07:14:44 MSK )

Перепроверь сертификаты: клиентский должен быть подписан ключом CA:

$ openssl verify -CAfile ca.crt client1.crt client1.crt: OK 

Если считаешь, что всё ок — покажи их.

d2 ★
( 25.04.16 19:26:14 MSK )
Ответ на: комментарий от d2 25.04.16 19:26:14 MSK

Раньше не мог ответить. Решил проблему еще в пятницу, пересоздав сертифкаты.

vvn_black ★★★★★
( 25.04.16 21:06:55 MSK ) автор топика
23 января 2017 г.

Может кому пригодится

До этого момента подразумевается, что у вас уже есть nginx с fast cgi и mod ssl и вам нужно исправить (400 Bad Request No required SSL certificate was sent) и ошибки подобные (error 18 at 0 depth lookup:self signed certificate OK ) и ошибок с не достоверным сертификатом без доступа к ресурсу (NET::ERR_CERT_INVALID).

Начнем с сертификатов. Изначально для понимания ошибка (NET::ERR_CERT_INVALID) связана с тем что при создании CA и подписи сертификатов не верное указано значение CN, если настроен DNS указывайте ваш адресс CN=www.linux.org.ru, если не настроен внешний ip например CN=136.243.142.156 это значение CN должно быть одинаково для всех дальнейших действий с сертификатами (примеры с пробросом рассматривать не будем). Рассмотрим решение ошибки (error 18 at 0 depth lookup:self signed certificate OK) Изначально openssl настроен таким образом, что значаения OU eA должны быть уникальными ( настройки которая позволяет использовать одинаковые значения мы рассматривать не будем) Созданим CA с уникальными значениями, кроме CN OU=Admin/CN=136.243.142.156/emailAddress=support@site.com и все последующие значения будут OU=Server/CN=136.243.142.156/emailAddress=server@site.com OU=Client1/CN=136.243.142.156/emailAddress=client1@site.com OU=Client2/CN=136.243.142.156/emailAddress=client2@site.com

openssl req -new -newkey rsa:1024 -nodes -keyout ca.key -x509 -days 500 -subj /C=RU/ST=Moscow/L=Moscow/O=Companyname/OU=Admin/CN=136.243.142.156/emailAddress=support@site.com -out ca.crt

Создаем сетртификат для nginx и запрос для него, указав уникаьные OU eA OU=Server/CN=136.243.142.156/emailAddress=server@site.com

openssl genrsa -des3 -out server.key 1024 openssl req -new -key server.key -out server.csr

Безпарольная копия для запуска nginx

openssl rsa -in server.key -out server.nopass.key

Создаем ca.config (перед первыми символами не должно быть помежутков)

[ ca ] default_ca = CA_CLIENT [ CA_CLIENT ] dir = ./db certs = $dir/certs new_certs_dir = $dir/newcerts database = $dir/index.txt serial = $dir/serial certificate = ./ca.crt private_key = ./ca.key default_days = 365 default_crl_days = 7 default_md = md5 policy = policy_anything [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = optional emailAddress = optional 

В каталоге с ca.config создает структуру указанную выше

mkdir db mkdir db/certs mkdir db/newcerts touch db/index.txt echo "01" > db/serial

Создаем запрос и выполняем на создание клиентов

openssl req -new -newkey rsa:1024 -nodes -keyout client2.key -subj /C=RU/ST=Moscow/L=Moscow/O=Companyname/OU=Client2/CN=136.243.142.156/emailAddress=client2@site.com -out client2.csr openssl ca -config ca.config -in client2.csr -out client2.crt -batch

Если вернутся выше у вас уже должен быть nginx+fast cgi, тогда конфиг будет примерно таким При настройке в nginx в разделе server отключаем http порт #listen 80; для корректной работы при ssl_verify_client on; Пример nginx конфига для

server < #listen :80; #server_name 136.243.142.156; access_log /var/log/nginx/default.access.log; listen 136.243.142.156:443 ssl; server_name 136.243.142.156; ssl on; ssl_certificate /etc/nginx/config/ssl/server.crt; ssl_certificate_key /etc/nginx/config/ssl/server.nopass.key; ssl_client_certificate /etc/nginx/config/ssl/ca.crt; ssl_verify_client on; keepalive_timeout 70; fastcgi_param SSL_VERIFIED $ssl_client_verify; fastcgi_param SSL_CLIENT_SERIAL $ssl_client_serial; fastcgi_param SSL_CLIENT_CERT $ssl_client_cert; fastcgi_param SSL_DN $ssl_client_s_dn; location / < root /var/www/default; fastcgi_pass 127.0.0.1:9000; include /etc/nginx/fastcgi_params; >

Проверяем работоспособность в curl (у вас не должно быть ошибки 400)

curl -k --key client2.key --cert client2.crt --url "https://136.243.142.156"

Пакуем для браузеров.

openssl pkcs12 -export -in client2.crt -inkey client2.key -out cert.p12

ssl_verify_client и ошибка 400: Bad request. No required SSL certificate was sent

Есть проблема с передачей клиентского сертификата серверу nginx.
Я настроил самозаверенный CA, серверный и клиентский сертификаты, но при попытках соединения всегда получаю ошибку 400: Bad request. No required SSL certificate was sent. Проверка сертификата сеервера проходит успешно, Но ни Firefox, ни curl и wget с соответствующими ключами даже не пытаются послать клиентский сертификат серверу. В логах nginx на уровне debug — только записи вида:
2011/03/13 13:44:00 [info] 20172#0: *2 client sent no required SSL certificate while reading client request headers

Сервер: GNU/Linux, nginx-0.8.54. Клиент: GNU/Linux.

Как понять, что происходит и почему? Могу прислать все необходимые логи, которые могут помочь при диагностике. И если нужно — то и сертификаты.

С уважением,

Андрей Коробков

400 No required SSL certificate was sent

400 Bad Request


No required SSL certificate was sent


nginx


Как возможно подключиться к веб серверу, который использует SSL соединение, проверку сертификата пользователя?

  • Дата
  • Дата
  • Рейтинг всех уровней
  • Рейтинг 1-го уровня
  • Древо развёрнутое
  • Древо свернутое

Свернуть все
2. spacecraft 10.07.15 09:51 Сейчас в теме
(1) Doom2w, первая строка неверная.

Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаФайл("C:/certs/user.p12", "password" ), Новый СертификатыУдостоверяющихЦентровФайл("C:/certs/myca.pem"));

TenshiGoan; + 1 – Ответить
3. Doom2w 23 10.07.15 10:04 Сейчас в теме

Новый ЗащищенноеСоединениеOpenSSL В Синтаксисе помощнике вариантов много

ssl1 = Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто), Новый СертификатыУдостоверяющихЦентровWindows()); ssl2 = Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаWindows(), Новый СертификатыУдостоверяющихЦентровФайл("C:/certs/myca.pem")); ssl3 = Новый ЗащищенноеСоединениеOpenSSL( Новый СертификатКлиентаФайл("C:/certs/user.p12", "password" ), Новый СертификатыУдостоверяющихЦентровФайл("C:/certs/myca.pem")); ssl4 = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено );

При указание переменной СертификатыУдостоверяющихЦентров
ошибку выдавать начинает на Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Описание=’Ошибка при вызове метода контекста (ОтправитьДляОбработки)’
ИмяМодуля=’Форма.Форма.Форма’
НомерСтроки=720
ИсходнаяСтрока=’ Результат = Соединение.ОтправитьДляОбработки(HTTPЗапрос);’

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *