0

При использовании 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 папки?

ответ

1

Вот отображение между контейнерами (в скобках) и их описание:

  • Personal (My) - Этот контейнер используется для хранения сертификатов с секретными ключами. Когда используется закрытый ключ сертификата, приложение ищет этот контейнер, чтобы найти соответствующий сертификат и связанный с ним закрытый ключ.
  • Доверенные корневые центры сертификации (ROOT) - Этот контейнер содержит доверенные самозаверяющие сертификаты без закрытых ключей. Каждая цепочка сертификатов должна соединяться с сертификатом, представленным в самозаверенной форме. Этот самозаверяющий сертификат является «корневым сертификатом» или «доверенным якорем». Однако не все корневые сертификаты могут считаться доверенными. Вы должны тщательно выбрать, какие новые сертификаты вы считаете доверенными.
  • Enterprise Trust (trust) - Этот контейнер используется для хранения списков доверительных сертификатов (CTL). Например, сервер управления ключами добавляет свой сертификат в этот контейнер.
  • Промежуточные сертификационные органы (CA) - В этом контейнере хранится множество сертификатов CA. Эти сертификаты обычно используются механизмом цепочки сертификатов для создания цепочек сертификатов.
  • Надежные издатели (TrustedPublisher) - В этом контейнере хранятся явно доверенные сертификаты подписи.Хотя сертификат цифровой подписи привязан к доверенному корневому центру сертификации, многие приложения (такие как Microsoft Office и Windows PowerShell) обязаны хранить конкретный сертификат подписи в этом контейнере, чтобы доверять подписям от этого конкретного подписывающего лица. Это означает, что приложение, поддерживающее цифровую подпись, может доверять одному подписанному сертификату, но не доверять другому сертификату подписи, даже если оба сертификата выдаются одним и тем же центром сертификации.
  • Неверные сертификаты (запрещены) - Этот контейнер хранит явно ненадежные сертификаты. Если вы решите не доверять ни конкретному сертификату, ни всем сертификатам, выпущенным определенным центром сертификации, просто добавьте эти сертификаты в этот контейнер. По умолчанию этот контейнер уже содержит два сертификата. Настоятельно рекомендуется НЕ УДАЛИТЬ их из контейнера. Для дополнительной информации читайте следующую статью: http://support.microsoft.com/kb/293817.
  • Сторонние корневые центры сертификации (AuthRoot) - Этот контейнер сертификатов похож на доверенные корневые центры сертификации. Он хранит сертификаты из Microsoft Root Certificate Program. Дополнительные сведения о программе Microsoft Root Certificate см. В следующей статье: http://support.microsoft.com/kb/931125.
  • Надежные люди (TrustedPeople) - Этот контейнер хранит сертификаты, выданные людям или конечным объектам, которым явно доверяют. Чаще всего это самоподписанные сертификаты или сертификаты, которым явно доверяют такие приложения, как Microsoft Outlook. Чтобы поделиться файлом, зашифрованным EFS, с другими сторонами, вы должны иметь свой сертификат в этом магазине.
  • Запросы на подачу свидетельства (ЗАПРОС) - Этот контейнер хранит заявки на регистрацию сертификатов до тех пор, пока эти запросы не будут отправлены в центр сертификации. Когда центр сертификации выдает сертификат в ответ на запрос, вам необходимо установить сертификат в этот контейнер с помощью специальной утилиты, такой как CertReq.exe. После этого запрос на регистрацию сертификата переносится в личный (Мой) контейнер в качестве сертификата.
  • Smart Card Trusted Roots (SmartCardRoot) - Этот контейнер используется для хранения доверенных сертификатов смарт-карт.
  • Другие люди (AddressBook) - В этом контейнере хранятся сертификаты, которые были добавлены в контакт Outlook.
  • Объект пользователя Active Directory (UserdDS) - Этот контейнер используется для хранения сертификатов, связанных с объектом пользователя, и опубликованных в Active Directory. Содержимое этого контейнера равно сертификатам, которые показаны в расширенном представлении консоли Active Directory - пользователи и компьютеры при просмотре свойств объекта пользователя.
+0

Спасибо, это именно то, что я ищу. У вас есть ссылка на исходный материал (официальные документы Microsoft) или это то, чему вы научились со временем? – Lucas

+0

Я собрал эту информацию (давно) из разных статей MSDN, и вряд ли я смогу восстановить точные ссылки. Он существует в моей внутренней документации, как есть. – Crypt32

+0

Прохладный, мне нужно будет проверить ваш проект [pki project] (https://pspki.codeplex.com/SourceControl/list/changesets?branch=default), так как мои усилия, изложенные выше, продолжают сталкиваться с проблемами доверия. Не уверен, что я делаю неправильно. Еще раз спасибо. – Lucas

 Смежные вопросы

  • Нет связанных вопросов^_^