Comments 7
Не критики ради, а для обсуждения: А для чего openssl, если есть родное решение от MS: certreq
Можно почитать тут для начала: https://4sysops.com/archives/create-a-certificate-request-with-powershell/
для чего openssl, если есть родное решение от MS: certreq
Полагаю, что для совместимости результата со всякими дурными системами, которые требуют .pem .crt .key и крайне привередливы к формату файла. Одним ключи внутри подавай, другим только отдельно, третьим full_chain собери, и только в нужном порядке. )
Если бы речь шла только о Windows, то вероятно certreq можно было бы и обойтись. Мне в одной и связок приходится сначала получать сертификаты от Let's Encrypt с помощью PoshACME , потом импортировать полученный .pfx в локальное хранилище Windows , потом экспортировать, и потом пересобирать все эти .pem с помощью OpenSSL. Зачем такой изврат? А потому, что полученные сертификаты никуда напрямую не садятся, везде нужен свой "особенный" формат. Свободные художники из мира Open Source так видят и хотят, блин. И даже .pfx от LE никуда толком не получается использовать, он тоже "особенный" внутри. Всё сделал на PowerShell, единственное отличие в подходе - генерирую .cmd для вызовов OpenSSL.exe и выполняю уже их.
Примерно так:
$tempCMDFileName = $directorypath + "\ProcessOpenSSL-" + $TimeLog + ".cmd"
if ( test-path $tempCMDFileName ) { Remove-Item $tempCMDFileName } # delete if exist
"cd " + $SourceCertPath | Set-Content $tempCMDFileName
"openssl pkcs12 -in $newPFXfileName -out file.nokey.pem -nokeys -password pass:$pfxPass" | add-Content $tempCMDFileName
"openssl pkcs12 -in $newPFXfileName -out file.withkey.pem -password pass:$pfxPass -passout pass:$pfxPass" | add-Content $tempCMDFileName
"openssl rsa -in file.withkey.pem -passin pass:$pfxPass -out file.key -passout pass:$pfxPass" | add-Content $tempCMDFileName
"" | add-Content $tempCMDFileName
& $tempCMDFileName
$In1 = $SourceCertPath + "\file.nokey.pem"
$in2 = $SourceCertPath + "\file.key"
$out = $SourceCertPath + "\m.domain.com-chain.with-key.v4.pem"
Get-Content $in1 , $in2 | Set-Content $out
Если не ошибаюсь, certreq это создание запросов на сертификат, а через openssl ещё и их выдачу автор описал.
certreq это создание запросов на сертификат
Не только создание запросов, но и подписывание и отправка. Т.е. получить сертификат от CA этой утилитой можно.
И да, верно, openSSL у топикстартера ещё и как конвертилка форматов задействована.
Ну если уж очень хочется и форматы менять, то есть certutil, но документацию читать нужно к ней.
Автор хорошо знает powershell и openssl, поэтому использует их по максимуму.
Создание подписанного TLS сертификата с помощью OpenSSL и PowerShell