добавление сертификата в удаленное хранилище x509 пропустило закрытый ключ

Задача состоит в том, чтобы импортировать сертификат на удаленный сервер (веб-версия сервера win2008/IIS7).

сертификат находится в файле .pfx.

после установки я заметил, что закрытый ключ сохраняется на клиентском сервере (с которого выполняется скрипт) (в C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys), а не на целевом сервере (где установлен сертификат). Из-за этого сертификата нельзя использовать для привязки сайта с ошибкой:

Указанный сеанс входа не существует. Возможно, он уже был прекращен.

Так. Я вижу, что сертификат установлен на удаленном сервере, но закрытый ключ - нет. Что я сделал не так?

Dim pathToPFXFile As String = "\\CertServer\e$\tmp\CPVanitySSLInstall.pfx" 
    Dim passwordForPFXFile As String = "xxx"
    Dim WinVanitySSLTable As Data.DataTable
    Dim cert, cert1 As X509Certificate2
    Dim certs As X509Certificate2Collection
    Dim store As X509Store

    cert = New X509Certificate2(pathToPFXFile, passwordForPFXFile, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)
    store = New X509Store("\\DestinationServerName\My", StoreLocation.LocalMachine)
    If (cert IsNot Nothing) Then
        store.Open(OpenFlags.MaxAllowed)
        store.Add(cert)
        store.Close()
    End If

Кстати, когда я запускаю этот скрипт на самом целевом сервере, он работает полностью, как и ожидалось. Кроме этого, я проверил доступ к хранилищу машинных ключей на удаленном сервере \DestinationServerName\C$\ProgramData\Microsoft\Crypto\RSA\MachineKeys, и все в порядке.


person AlexS    schedule 28.01.2013    source источник
comment
Я продолжил экспериментировать с проблемой и обнаружил, что коряво установленный сертификат МОЖЕТ экспортироваться в файл pfx С закрытым ключом! И после этого этот новый файл pfx можно импортировать обратно в магазин (вручную) и он работает (можно привязать к сайту). Значит ли это, что закрытый ключ был скопирован на целевой сервер?! Но я не смог его найти... Консоль IIS тоже...   -  person AlexS    schedule 29.01.2013
comment
Не удалось заставить это работать таким образом. Я нашел 2 рабочих варианта выполнения этой работы: 1. запустить процесс в своем коде: psexec "\\RemoteServerName" certutil -f -p "PasswForPfxFile" -importpfx "PFXFileFullPath" 2. использовать объект IIS.CertObj. (Поддержка IIS6 должна быть установлена ​​на серверах win2008/IIS7) Еще один возможный способ использования ADSI... что-то вроде: DirectoryEntry(@"IIS://localhost/W3SVC/1/Root") Хотя я не проверял...   -  person AlexS    schedule 01.02.2013


Ответы (1)


Вы можете использовать диспетчер сертификатов в Windows, чтобы проверить, есть ли у сертификата связанный закрытый ключ. Выберите сертификат в списке и нажмите «Открыть» или посмотрите на значок, если в нем есть маленький ключ, у вас есть закрытый ключ. Если у него есть закрытый ключ, убедитесь, что у iis или вашего приложения asp.net есть разрешения на доступ к нему. Вы можете найти файл закрытого ключа в C:\Users\All Users\Microsoft\Crypto\RSA\MachineKeys, чтобы проверить разрешения.

person eric_the_animal    schedule 09.09.2013