Powershell New-SelfSignedCertificate CA не работает на iOS 14.2

#ios #iphone #powershell #ssl #certificate

#iOS #iPhone #powershell #ssl #сертификат

Вопрос:

Я пытаюсь сгенерировать CA и SSL-сертификат для приложения IIS с помощью Powershell. Это работает, как и ожидалось, в Windows, когда я вручную добавляю центр сертификации в корневое хранилище сертификатов локального компьютера.

Проблема заключается в подключении со смартфона, iPhone отказывается распознавать CA, когда я пытаюсь его установить.

Это сценарий CA:

 $ca_certificate = New-SelfSignedCertificate -CertStoreLocation cert:CurrentUserMy -NotAfter (Get-Date).AddDays(820) -DnsName 'VMS Certificate Authority' -KeyusageProperty All `
 -KeyUsage CertSign, CRLSign, DigitalSignature -FriendlyName 'My CA' -KeyAlgorithm RSA -KeyLength 2048

Export-Certificate -Cert "Cert:CurrentUserMy$($ca_certificate.Thumbprint)" -FilePath "$PSScriptRootroot-authority-public.cer"
 

Я могу установить профиль на свой iPhone, но во время установки я получаю предупреждающее сообщение «Подлинность «Моего центра сертификации» не может быть проверена» и ничего больше. После установки статус по-прежнему «Не проверен». В разделе Общие-> О программе-> Настройки доверия сертификатов ничего нет (только версия хранилища / ресурса доверия).

Мне удалось создать центр сертификации openssl, и он успешно добавлен в телефон, но не распознан приложением с использованием SSL-сертификата.

У кого-нибудь есть опыт работы с этим?

Комментарии:

1. Спасибо Христу за это. Получаю ту же ошибку и думал, что я один в мире. Пока здесь неясные подсказки eengstrom.github.io/musings /… Вам когда-нибудь удавалось разобраться с этим?

2. @Frank Привет, да, я понял это. Я обновлю ответ на свой вопрос!

Ответ №1:

Мне удалось заставить его работать. По-видимому, iOS не распознает сертификат как CA, если у него нет базового ограничения Subject Type=CA .

 -TextExtension @("2.5.29.19={text}cA=trueamp;pathLength=2")
 

Таким образом, полная команда для CA, действительного 5 лет, может быть

 $ca_certificate = New-SelfSignedCertificate -CertStoreLocation cert:CurrentUserMy -DnsName 'My Awesome CA' -KeyusageProperty All `
 -KeyUsage CertSign, CRLSign, DigitalSignature -FriendlyName 'My Awesome CA' -TextExtension @("2.5.29.19={text}cA=trueamp;pathLength=2") -NotAfter (Get-Date).AddYears(5)
 

Комментарии:

1. Приветствую Феликса. В итоге я тоже исправил это и столкнулся с несколькими проблемами.

2. Похоже, это не работает на iOS 15. Я перепробовал все возможные комбинации. Я также изменил его на один год. Он будет установлен, но я просто не могу заставить Safari распознать его. Ранее мне удавалось заставить это работать, но больше не могу.

Ответ №2:

ВАЖНО:

После создания сертификата вы должны экспортировать его как СЕРТИФИКАТ, а не как сертификат PFX. Сертификат PFX содержит секретный ключ и должен быть защищен паролем. Я не уверен, что это изменение iOS 15, но это может быть.

Я перепробовал дюжину различных комбинаций New-SelfSignedCertificate команды, но оказалось, что я экспортировал свой сертификат с:

 Export-PfxCertificate -cert cert:localMachinemy6C730102B3E... -FilePath 1.pfx
 

Как только я переключился на эту команду, она сработала:

 Export-Certificate -cert cert:localMachinemy6C730102B3E... -FilePath 2.pfx
 

Да, я намеренно использую .pfx в качестве расширения. Вы могли бы использовать .cer , но я устанавливаю его, посетив его в Safari в качестве URL-адреса, и .cer , похоже, он не работает. Дело в том, что файл не содержит полного сертификата.

При установке, если вы не получите следующее сообщение, которое является ранним предупреждающим знаком, оно не сработает:

Установка сертификата «XXXXX» добавит его в список доверенных сертификатов на вашем iPhone. Этот сертификат не будет надежным для веб-сайтов, пока вы не включите его в настройках доверия сертификатов.

Затем, конечно, вам нужно перейти General->About->Certificate Trust Settings , чтобы включить его, и теперь он должен появиться там.