Я могу подтвердить, что это работает, используя ответ @ zvi .Спасибо!
Позвольте мне рассказать подробнее о моей реализации, чтобы помочь другим людям.Особенно меня смутило, какие файлы мне нужно подписать и как их получить.
1.Получить сертификат
Я использовал бесплатный сертификат от Let's Encrypt через ZeroSSL , чтобы легко получить 2 необходимых файла (сертификат и закрытый ключ).
Вам нужно будет доказать, что домен принадлежит вам (с использованием метода FTP или DNS)
Я сохранил сертификат как "certificate.crt" и закрытый ключ как " private-key.pem ".Загрузите их куда-нибудь на свой сервер.
2.Получите файл цепочки центра сертификации
Если вы просто используете 2 вышеупомянутых файла, ваш профиль будет подписан, но не будет «проверен» в iOS (зеленый флажок, который я искал)
Загрузите «Сеть доверия» с этой страницы .
Я использовал «Let's Encrypt Authority X3 (IdenTrust перекрестная подпись)» и сохранил его в «ca-chain.pem» .Загрузите его на свой сервер вместе с двумя другими.
3.Создание метода входа PHP
Чтобы подписать его с помощью сценария PHP, я разработал метод для этого, взяв файл входного профиля (без подписи) и записав его в файл выходного профиля (подписанный).
Я использовал метод, описанный здесь , чтобы вызвать команду openssl из PHP, используя shell_exec
<?php
function sslSignProfileToFile($inputFile, $outputFile)
{
$sslPath = '/absolute/path/to/your/cert/files';
shell_exec("openssl smime -sign -signer ".$sslPath."/certificate.crt -inkey ".$sslPath."/private-key.pem -certfile ".$sslPath."/ca-chain.pem -nodetach -outform der -in ".$inputFile." -out ".$outputFile);
}
?>
4.Создайте свой профиль и подпишите его
Создайте его по своему усмотрению, а затем вызовите указанный выше метод, чтобы сделать его подписанную копию.
<?php
sslSignProfileToFile( "/path/to/your/unsigned-profile.mobileconfig", "/path/to/your/signed-profile.mobileconfig");
?>
5.НАСЛАЖДАЙТЕСЬ!
Тогда вам решать:
если вы находитесь в таком запросе AJAX, как я, вы можете вернуть в теле URL-адресподписанный профиль для загрузки
, если вы использовали POST-действие классической формы, вы можете просто выполнить перенаправление заголовка , как описано здесь (не проверено мной)