2015-02-25 4 views
0

Я почти ничего не знаю о сертификатах, так как есть CA, public и private key, и я учусь, когда я иду. Я создаю логин SSO, используя SAML 2, который у меня работает с исключением добавления элемента <Signature>.Подпись - сертификат X509 с закрытым ключом - SAML2

Создание сертификата:

У меня есть копия makecert.exe и pvk2pfx.exe в каталоге. Я открываю cmd и введите следующую команду:

makecert -r -pe -n "CN=Test Cert" -sky exchange -sv testcert.pvk testcert.cer 

диалоговое окно с просьбой ввести пароль и подтвердить пароль, который я вхожу. Появится другое диалоговое окно с запросом пароля (я предполагаю, что это тот же, который я ввел ранее, что я делал). Это создает testcert.cer в том же каталоге.

Затем я печатаю это в cmd

pvk2pfx -pvk testcert.pvk -spc testcert.cer -pfx testcert.pfx 

EDIT: Он просит у меня пароль. Я вводил тот же пароль (private key), который я использовал при создании cer.

Он создает файл pfx в каталоге.


Здесь я смущен. Если я импортировать файл cer в MMC, я могу получить доступ к нему:

 X509Certificate2 cert = null; 

     var store = new X509Store(StoreLocation.CurrentUser); 
     store.Open(OpenFlags.ReadOnly); 

     var storeCollection = store.Certificates.Find(X509FindType.FindBySubjectName, "Test Cert", false); 
     if (storeCollection.Count == 1) 
     { 
      cert = storeCollection[0]; 
     } 

     if (cert == null) 
     { 
      throw new ArgumentNullException("Certificate", "No certificate found."); 
     } 

     store.Close(); 

Однако, когда я делаю это, закрытый ключ (свойство) является null. Я прочитал, что закрытый ключ находится в файле pfx. Таким образом, вместо того, чтобы доступ к хранилищу, я делаю это:

privateKey является закрытым ключом, который я использовал при создании сертификата с помощью makecert.exe

X509SigningCredentials clientSigningCredentials = new X509SigningCredentials(
    X509Certificate2(@"c:\directory\testcert.pfx", privateKey, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable)); 

Я получаю сообщение об ошибке: The specified network password is not correct.

Я также попытаться для импорта файла pfx в MMC вместо файла cer. Он запрашивает у меня пароль. Я помещаю пароль в том, что я использовал для создания сертификата, используя makecert.exe. Это ВСЕГДА сообщает мне, что пароль неверен.

Что я делаю неправильно?

+0

Вам необходимо загрузить pfx not cer. сертификат ТОЛЬКО имеет открытый ключ. PFX представляет собой пакет cert и закрытый ключ. – pm100

+0

, и вы должны знать, что makecert.exe устарел и больше не поддерживается. – Crypt32

+0

@ pm100 - ОК, но почему «закрытый ключ» всегда неверен, когда я пытаюсь либо импортировать в «MMC» и/или загружать, используя «X509SigningCredientals»? –

ответ

0

Я считаю, что makecert и pvk2pfx были чем-то неправильным.Я знаю, что это не ответ, но я нашел это отличный маленький инструмент:

PluralSight's Self-Cert

В основном делали то же самое, но когда я смотрел сертификат он имел:

у вас есть закрытый ключ, соответствующий этому сертификату

Остальное testcert.cer не было этого.

Теперь код

X509SigningCredentials clientSigningCredentials = new X509SigningCredentials(
X509Certificate2(@"c:\directory\testcert.pfx", privateKey, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.Exportable)); 

возвращается ж/без проблем, и мой SAML утверждение хорошо идти.

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