#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
, чтобы включить его, и теперь он должен появиться там.