2014-02-20 3 views
3

Я пытаюсь написать скрипт Powershell установить сертификат в хранилище сертификатов активного каталога,Powershell скрипт для установки сертификата в Directory Store Активного

Вот шаги, чтобы сделать это вручную, любая помощь будет в значительной степени оценили.

На контроллере домена Windows 2008R2,

Нажмите кнопку Пуск -> Выполнить

типа MMC

нажмите ОК

Нажмите Файл -> Добавить/Удалить Snap-In

Выберите «Сертификаты» -> Добавить

Выберите " Обслуживание счета»

Нажмите Next

Выберите "Локальный компьютер"

Нажмите Next

Выберите "Active Directory Domain Services"

Нажмите кнопку Готово

Нажмите Ok

Мне нужен скрипт t о установке сертификата на:

NTDS \ Personal

Я бы разместить изображение, но у меня не хватает «репутации», видимо, поэтому я могу только предоставить текстовые инструкции.

Итак, в основном, что я пробовал, я использовал эту функцию powershell ниже, чтобы импортировать сертификат в локальную машину -> Личное хранилище, в котором находится большинство сертификатов, и код работает.

Но мне нужно, чтобы установить сертификат в «NTDS \ Personal» магазин на контроллере домена, но $ certRootStore принимает только LocalMachine или CurrentUser, поэтому я застрял:/

function Import-PfxCertificate 
{ 
    param 
    (
     [String]$certPath, 
     [String]$certRootStore = "localmachine", 
     [String]$certStore = "My", 
     $pfxPass = $null 
    ) 
    $pfx = new-object System.Security.Cryptography.X509Certificates.X509Certificate2 

    if ($pfxPass -eq $null) 
    { 
     $pfxPass = read-host "Password" -assecurestring 
    } 

    $pfx.import($certPath,$pfxPass,"Exportable,PersistKeySet") 

    $store = new-object System.Security.Cryptography.X509Certificates.X509Store($certStore,$certRootStore) 
    $store.open("MaxAllowed") 
    $store.add($pfx) 
    $store.close() 
} 

Import-PfxCertificate -certPath "d:\Certificate.pfx" 

С уважением Alex

+2

Но если вы посмотрите на StoreLocation на MSDN, он разрешает только CurrentUser и LocalMachine, нет места, где можно использовать «Учетную запись службы»: [Просмотр списка магазинов] (http://msdn.microsoft.com/en- us/library/system.security.cryptography.x509certificates.storelocation (v = vs.110) .aspx) –

+0

Извините за форматирование, не знаете, как сделать выделение синтаксиса или блок кода для сценария powershell. –

+1

Вы всегда можете отредактировать свой вопрос, включив код и [формат с уценкой] (http://stackoverflow.com/help/formatting). Затем вы можете удалить комментарии. – jscott

ответ

1

Хорошо, сначала плохая новость. Единственными управляются сертификаты: LocalMachine и CurrentUser, как мы все видели в powershell.

Теперь не так уж плохая новость. We знает, что «физическое» хранилище местоположений (физическое - это слово MS, а не мое) существует в реестре на сервере ADDS, HKLM \ Software \ Microsoft \ Cryptography \ Services \ NTDS \ SystemCertificates.Это было двойственным аттестованы как

  1. Использование procmon при импорте сертификата в хранилище с помощью ММС в

  2. Scavenging MSDN для this nugget

ссылка в # 2 показывает что все физические хранилища для сервисов хранятся в указанном выше пути, заменяя NTDS for. real имя службы, а не отображаемое имя.

Однако

enter image description here

Из-за плохих новостей. Попытка сопоставить его в powershell с этим ключом reg, поскольку корень и -PSProvider Certificate окажутся разочаровывающими, это было первое, что я пробовал.

Что можно сделать попробуйте, использует конструктор X509Store, который принимает IntPtr в SystemStore, as described here. Да, это вызывает какой-то неуправляемый код, и смешение двух - это то, что я делаю редко, но this и googling для HCERTSTORE C# должен доставить вас туда.

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