4

Я закончил настройку IdentityServer.v3 с IdentityManager, и все работает в значительной степени, как я хочу. Остается только заменить сертификат X.509 на собственный самозаверяющий. Я использую code here для загрузки моего встроенного сертификата. То, что я делаю, это копирование моего .pfx-файла в папку конфигурации и изменение имени сертификата и пароля для этого файла pfx в файле Cert.cs. Кроме того, я устанавливаю «Build Action: Embedded Resource» и «Copy to Output Directory: Do not copy» в новые свойства файла pfx.Изменение встроенного самоподписанного сертификата X.509 (idsrv3test.pfx) в IdentityServer.v3

Когда я публикую свое решение, я получаю широко распространенную ошибку приложения.

The system cannot find the file specified. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Security.Cryptography.CryptographicException: The system cannot find the file specified. 

Есть ли определенный способ создания файла pfx? Я создал мой, используя makecert.exe и pvk2pfx.exe файлов. Кроме того, я использую этот сертификат для обеспечения безопасности домена, на котором размещается IDSRV3. Не затрагивая конфигурацию сертификата, оба IdentityServer.v3 и IdentityManager работают без ошибок.

Что мне здесь не хватает?

+1

Вложенный сертификат действительно предназначен только для тестирования. Для производства вам действительно нужно настроить сертификат из более безопасного места, например, в хранилище сертификатов Windows. –

+0

Спасибо, мне удалось загрузить мой сертификат из хранилища сертификатов Windows. Но мне удалось решить и мой вопрос. В ближайшее время я добавлю свои выводы. – ilter

+0

Типичная проблема с загрузкой встроенных сертификатов: http://stackoverflow.com/questions/9951729/x509certificate-constructor-exception/10048789#10048789 –

ответ

3

Во-первых, ответ на мой вопрос. После некоторого (!) Поиска я обнаружил, что для загрузки встроенных сертификатов при размещении в IIS мы должны внести небольшое изменение в конфигурацию пула приложений. В дополнительных настройках пула приложений измените значение «Загрузить профиль пользователя» на значение true. Кажется, что сертификаты загружаются в профиль пользователя, и мы как-то должны позволить IIS получить доступ к этой информации с помощью этого изменения конфигурации.

Что касается загрузки, сертифицированного из Хранилища сертификатов Windows, вот код, который я использовал.

public static X509Certificate2 GetCert() 
{ 
    X509Certificate2 cert = FindCertificate(StoreLocation.LocalMachine, StoreName.My, X509FindType.FindBySerialNumber, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"); // serial number is a 32 digit GUID without any white spaces or dashes. It can be found from details of cert file 

    return cert; 
} 

static X509Certificate2 FindCertificate(StoreLocation location, StoreName name, X509FindType findType, string findValue) 
{ 
    X509Store store = new X509Store(name, location); 
    try { 
     store.Open(OpenFlags.ReadOnly); 
     X509Certificate2Collection col = store.Certificates.Find(findType, findValue, false); 
     return col[0]; } 
    finally 
    { 
     store.Close(); 
    } 
} 

Убедитесь, что вы загрузили сертификат в хранилище сертификатов Windows в личной папке и использовали файл .pfx.

Я надеюсь, что это поможет другим, которые задирают сертификаты, как я.

EDIT: Очень важно, что, если вы можете найти сертификат на серийном номере, вы должны написать серийный номер с ВЕРХНИМ букв. Когда вы копируете серийный номер с консоли MMC, он обнуляется и VS загружает сертификаты в хранилище с помощью UPPER CASE букв.

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