Как отправить самозаверяющий сертификат клиентам через https с помощью powershell - PullRequest
0 голосов
/ 04 мая 2019

Я создаю REST API в PowerShell для работы по протоколу https для целей тестирования.Моя цель - создать псевдо-https API и использовать его для тестирования функциональности нашего приложения (приложение должно вызывать мой тестовый https api).Я могу создать самозаверяющий сертификат, используя следующий код.

$hostIP = Get-NetIPAddress | where{ ($_.InterfaceAlias -in @('Mgmt', 'Ethernet', 'management')) -and ($_.AddressFamily -eq 'IPv4')}
$win_path= 'c:\my_temp\'

$Cert = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -   dnsname $hostIP.IPAddress -NotAfter (Get-Date).AddYears(2)
$Certname = $hostIP.IPAddress.Replace('.','_')
$pw = ConvertTo-SecureString -String "Pazzword" -Force -AsPlainText
$thumbprint = $Cert.Thumbprint
Export-PfxCertificate -cert cert:\localMachine\my\$thumbprint -FilePath 
$win_path\$Certname.pfx  -Force -Password $pw

API REST, который я пишу, выглядит примерно так

$listener = New-Object System.Net.HttpListener
$httpUrl = "http://" + $givenArgs.HostName + ":" + $givenArgs.Port + "/"
Write-Output $httpUrl
$listener.Prefixes.Add($httpUrl) 
$httpsUrl = "https://" + $givenArgs.HostName + ":" + 443 + "/"
Write-Output $httpsUrl
$listener.Prefixes.Add($httpsUrl)
$listener.Start()

У меня такой вопрос, если я устанавливаю сертификат, созданный на моем компьютере вручную, явозможность отправлять запросы в мой REST API, но только с моей машины.

Я хотел бы отправить сертификат (отправить копию сертификата для клиентов по первичному запросу без использования ЦС) клиентам, чтобы при первом запросе клиента на сервер он получал копиюсертификат и может сохранить его для дальнейшего общения.

Я пытался найти это в Интернете, но я мог найти только решения, ведущие к 1. Игнорированию сертификата или 2. Импортированию сертификата вручную, что не отвечает моим потребностям.

Цените ваше время, чтобы изучить это и вашу помощь.Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 04 мая 2019

Вам не нужно явно отправлять сертификат. Каждый раз, когда клиент посещает сайт https, сертификат открытого ключа всегда возвращается вместе с запросом. Проблема в том, что после этого клиент должен решить, что делать с сертификатом.

Клиент сначала просматривает сертификат и проверяет, является ли он доверенным. Если это доверенный сертификат (т. Е. Вы покупаете сертификат Verisign), то соединение принято. Для самозаверяющих сертификатов, поскольку они не являются доверенными, у клиента есть только 2 варианта:

  1. Игнорировать происхождение сертификата и вслепую подключаться
  2. Примите, что источнику можно доверять, и импортируйте сертификат

Вы не можете обойти этот фундаментальный факт. Самозаверяющие сертификаты подобны доставке объекта в форме бомбы клиенту с наклейкой на нем с надписью «Не бомба - поверь мне, я @ user3543477», они могут либо проигнорировать наклейку, либо принять, что я могу доверять @ user3543477. Вы не можете протолкнуть пакет через входную дверь без их явного согласия. Если на наклейке написано: «Не бомба - поверьте мне, я был проверен экспертами по бомбам», поскольку клиент доверяет специалистам по бомбам, клиент примет пакет без вопросов.

Самозаверяющие сертификаты только используются для целей разработки. Я постоянно говорю людям, чтобы они даже не пытались заставить их работать, потому что вы не можете.

Правильный *1021* способ сделать сертификаты - это получить надлежащий доверенный сертификат от подобных Verisign или, что я сейчас рекомендую, который специально разработан для API, это получить бесплатный сертификат от Let's Encrypt . Таким образом, вы получаете правильный доверенный сертификат и не имеете дело с самозаверяющими сертификатами.

0 голосов
/ 04 мая 2019

Когда используется сертификат, должен быть установлен путь сертификации. сертификаты корневого ЦС являются самоподписанными. Дело в том, что им доверяют заранее.

На вашем локальном компьютере, где был создан самозаверяющий сертификат, сертификат является доверенным. Другие машины не будут иметь этот сертификат: чтобы заставить их доверять вашему сертификату

  • сертификат должен быть добавлен (ваш вариант №2) обычно в хранилище доверенных корневых сертификатов, где самозаверяющие сертификаты общедоступного ЦС были добавлены вашей логикой операционной системы. ИЛИ
  • пути сертификации нужно доверять даже при наличии ненадежного корня (ваш вариант 1.)

Так что в основном ваши варианты - это те, которые вы суммировали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...