it-swarm.com.ru

Самозаверяющий SSL сертификат для localhost, как сделать доверенным

У меня есть приложение Owin Self-Host C #, которое предоставляет сервисы веб-API через 127.0.0.1:5555 (оно только прослушивает локальный хост, никаких внешних подключений).

Эти сервисы Web API вызываются с помощью Ajax из приложения AngularJS. В дополнение: причина для приложения Owin состоит в том, что необходимо определенное взаимодействие с оборудованием, которое невозможно из браузера. Кроме того, приложение AngularJS предназначено для внутреннего использования, поэтому я могу контролировать используемые браузеры.

Вышеописанное работает очень хорошо по HTTP, но приложению Angular JS необходимо использовать SSL, который не работает, если приложение Owin также не использует SSL (в противном случае вы получаете ошибки "Смешанное содержимое").

Я купил официальный сертификат для приложения AngularJS, и я использую самоподписанные сертификаты для локального контента Owin.

Проблема в том, что я получаю "NET :: ERR_CERT_AUTHORITY_INVALID" (при тестировании из Chrome) и "net :: ERR_INSECURE_RESPONSE" из приложения AngularJS при обращении к веб-API Owin.

Вот что я сделал в общих чертах:

Я использовал CentOS для генерации сертификата для localhost и экспортировал его в формат pkcs12/pfx. Я также создал сертификат CA и экспортировал его таким же образом.

Используя MMC, я импортировал сертификат localhost на компьютере под управлением Windows 7, на котором запущено приложение Angular & Owin, в Сертификаты (локальный компьютер)> Личные> Сертификаты.

Я также импортировал сертификат CA на компьютере с Windows 7 в Сертификаты (локальный компьютер)> Надежные корневые центры сертификации> Сертификаты

Глядя на сертификат localhost, он говорит: "Issued to: localhost", Issued by: "ca.acme.com", "У вас есть закрытый ключ, соответствующий этому сертификату", (в разделе "Путь сертификации") "Этот сертификат действителен"

Сертификат CA говорит: "Выдан: ca.acme.com", Выдан: "ca.acme.com", "У вас есть закрытый ключ, соответствующий этому сертификату", (в разделе "Путь сертификации") "Этот сертификат в порядке"

netsh http show sslcert

IP:port                 : 127.0.0.1:5555 
Certificate Hash        : 1234555555555555555555511155555555555555
Application ID          : {1234a123-1234-1234-1234-123412341234} 
Certificate Store Name  : (null) 
Verify Client Certificate Revocation    : Enabled
Verify Revocation Using Cached Client Certificate Only    : Disabled
Usage Check    : Enabled
Revocation Freshness Time : 0 
URL Retrieval Timeout   : 0 
Ctl Identifier          : (null) 
Ctl Store Name          : (null) 
DS Mapper Usage    : Disabled
Negotiate Client Certificate    : Disabled

Что мне не хватает? Как заставить Chrome и т.д. Доверять сертификату SSL для localhost?

8
Lars335

Я получил это работает (достаточно для моих текущих потребностей, по крайней мере).

Я скопировал сертификат localhost из «Сертификаты ( Локальный компьютер )> Личные> Сертификаты» в «Сертификаты ( Текущий пользователь )> Личные> Сертификаты». Это избавило от красного перечеркнутого https в Chrome (и сообщения «NET :: ERR_CERT_AUTHORITY_INVALID»), а также от ошибки «net :: ERR_INSECURE_RESPONSE» в AngularJS.

Обратите внимание, что в моем случае сертификат localhost должен находиться как в хранилище локального компьютера, так и в хранилище текущего пользователя, в противном случае команда netsh для привязки его к порту 5555 (для приложения Owin) не будет выполнена:

netsh http add sslcert ipport=127.0.0.1:5555 certhash=1234555555555555555555511155555555555555 appid={1234a123-1234-1234-1234-123412341234}

SSL Certificate add failed, Error: 1312, A specified logon session does not exist. It may already have been terminated.

В Chrome до сих пор нет приятного зеленого замка (теперь у него есть маленький желтый треугольник на замке «Идентификация этого сайта была подтверждена ca.acme.com, но не имеет публичных аудиторских записей»), но это похоже, не мешает взаимодействию Web API, поэтому все должно быть в порядке.

Если кто-нибудь знает простой способ сделать его зеленым и красивым без предупреждений, мне все равно интересно, но это не критично.

6
Lars335

В Linux мне пришлось apt-gt install libnss3-tools

С помощью libnss3-tools вы получаете certutil

Теперь клавиша-команда:

certutil -d sql:$HOME/.pki/nssdb -A -t "CP,CP," -n <your alias> -i <your crt-file to import>

Это решит все мои проблемы с Chrome на Raspberry/Linux

0
Mike Mitterer