При использовании powershell для исследования Certificate Provider я заметил, что все пути выглядят аналогичными, но не такими, как структура папок в пределах certmgr. Это кажется довольно очевидным, что:Кто-нибудь знает, как пути поставщика сертификатов powershell сопоставляются с папками certmgr.msc?
Certs:\LocalMachine ~= Certificates (Local Computer)
Certs:\CurrentUser ~= Certificates - Current User
Я также предполагаю, что:
Root ~= Trusted Root Certification Authority
My ~= Personal
WebHosting ~= WebHosting
...
Но я так и не смогли найти какой-либо официальной ссылки (или даже разумное объяснение), чтобы дать мне warm fuzzy Я ищу ...
Я намерен протестировать https-службу WCF локально (как на сервере, так и на стороне клиента). Я могу легко создать собственный сертификат, необходимый серверу, используя New-SelfSignedCertificate. Однако, если я попытаюсь указать мой клиент (также .NET) на службу, он не сможет подключиться, учитывая, что служба обслуживает не доверенный сертификат.
я нашел различные устаревают ссылки (как this one), показывая, как я мог бы использовать комбинацию makecert (ныне устаревшее), и certmgr для создания центра сертификации, а затем использовать его, чтобы подписать сертификат для моего https, затем установите сертификат центра сертификации в Доверенный корневой центр сертификации контейнер, чтобы все работало. Хотя этот подход, скорее всего, будет работать, он, безусловно, не поддерживает разработчиков и автоматизации.
То есть, я был в состоянии использовать PowerShell, чтобы сделать это:
$my_cert_store_location = "Cert:\LocalMachine\My"
$root_cert_store_location = "Cert:\LocalMachine\Root"
$root_friendly_name = "Test Root Authority"
$root_cert_subject = "CN=$($root_friendly_name)"
# The ip and port you want to reserve for your app
$ipport = "127.0.0.11:8734"
# Your app guid (found in ApplicationInfo.cs)
$appid = "{f77c65bd-d592-4a7b-ae32-cab24130fdf6}"
# Your dns name
$dns_name = "my-machine-local"
$rebuild_root_cert = $false
$root_cert = Get-ChildItem $my_cert_store_location |
Where-Object {$_.SubjectName.Name.Equals($root_cert_subject)}
if ($root_cert -and $rebuild_root_cert)
{
Get-ChildItem $root_cert_store_location |
Where-Object {$_.SubjectName.Name.Equals($root_cert_subject)} |
Remove-Item
Remove-Item $root_cert
$root_cert = $false
}
if (-not $root_cert)
{
$root_cert = New-SelfSignedCertificate `
-Type Custom `
-FriendlyName $root_friendly_name `
-HashAlgorithm sha384 `
-KeyAlgorithm RSA `
-KeyLength 4096 `
-Subject $root_cert_subject `
-KeyUsage DigitalSignature, CertSign `
-NotAfter (Get-Date).AddYears(20) `
-CertStoreLocation $my_cert_store_location
Write-Output "Created root cert: $($root_cert.Thumbprint)"
$exported_cert = New-TemporaryFile
Export-Certificate -Cert $root_cert -FilePath $exported_cert.FullName
$imported_root_cert = Import-Certificate -FilePath $exported_cert.FullName `
-CertStoreLocation $root_cert_store_location
Write-Output "Imported root cert to: $($root_cert_store_location)\$($imported_root_cert.Thumbprint)"
}
Write-Output "Root cert is: $($root_cert.Thumbprint)"
$test_signed_cert_subject = "CN=$($dns_name)"
$test_signed_cert = Get-ChildItem $my_cert_store_location |
Where-Object {$_.SubjectName.Name.Equals($test_signed_cert_subject)}
if (-not $test_signed_cert)
{
$test_signed_cert = New-SelfSignedCertificate `
-Type Custom `
-Subject $test_signed_cert_subject `
-FriendlyName $dns_name `
-Signer $root_cert `
-CertStoreLocation $my_cert_store_location
Write-Output "Created signed cert: $($test_signed_cert.Thumbprint)"
}
Write-Output "Signed cert is: $($test_signed_cert.Thumbprint)"
if ($test_signed_cert)
{
netsh http delete sslcert `
ipport="$($ipport)"
netsh http add sslcert `
ipport="$($ipport)" `
appid="$($appid)" `
certstorename="My" `
certhash="$($test_signed_cert.Thumbprint)"
Write-Output "Assigned signed cert to: $($ipport)"
}
Но вопрос все еще стоит ... Есть ли информация о том, как пути поставщика сертификата на карте для certmgr папки?
Спасибо, это именно то, что я ищу. У вас есть ссылка на исходный материал (официальные документы Microsoft) или это то, чему вы научились со временем? – Lucas
Я собрал эту информацию (давно) из разных статей MSDN, и вряд ли я смогу восстановить точные ссылки. Он существует в моей внутренней документации, как есть. – Crypt32
Прохладный, мне нужно будет проверить ваш проект [pki project] (https://pspki.codeplex.com/SourceControl/list/changesets?branch=default), так как мои усилия, изложенные выше, продолжают сталкиваться с проблемами доверия. Не уверен, что я делаю неправильно. Еще раз спасибо. – Lucas