2013-07-21 6 views
0

Я пытаюсь понять больше о цифровых сертификатах X.509. Кажется, что существует много противоречий. Я использую Bouncy Castle для создания пары ключей, используяX.509 Самостоятельные сертификаты

public static void SaveToFile(X509Certificate newCert, AsymmetricCipherKeyPair kp, string filePath, string certAlias, string password) 
{ 
    var newStore = new Pkcs12Store(); 
    var certEntry = new X509CertificateEntry(newCert); 
    newStore.SetCertificateEntry(certAlias, certEntry); 
    newStore.SetKeyEntry(certAlias, 
      new AsymmetricKeyEntry(kp.Private), new[] { certEntry }); 

    using (var certFile = File.Create(filePath)) 
     newStore.Save(certFile, password.ToCharArray(), new SecureRandom(new CryptoApiRandomGenerator())); 
} 

Это сохраняет сгенерированный сертификат на диск. Некоторые статьи говорят нам, что нет необходимости защищать паролем сертификат, поскольку там нет PRIVATE KEY. Затем this article говорит, что сертификат действительно содержит PRIVATE KEY.

Я думаю, у меня есть два вопроса, которые, мы надеемся, поможет мне понять это:

  1. Если я генерировать ключи в этом случае, если пароль такой же, как ключевой фразы для PRIVATE KEY?
  2. Предоставить сертификат X.509, чтобы доказать, что PUBLIC KEY принадлежит мне (сопряженному с моим именем в сертификате) или должен хранить сертификат как безопасный и секретный, как PRIVATE KEY, и какое использование является самозаверяющим сертификатом?

ответ

1

Файл PKCS # 12 может содержать как сертификат и закрытый ключ. Однако они хранятся как отдельные, разные объекты. Сам сертификат имеет открытый ключ . Поскольку сертификат содержит только открытый ключ, он считается «общедоступным». Вы можете свободно распространять сертификат, так как он не содержит секретный ключ , который должен быть конфиденциальным. Это основа безопасности в асимметричной криптографии.

Поскольку PKCS # 12 файл содержит как элементов, он зашифрован с паролем для защиты закрытого ключа внутри него. Тем не менее, вы бы использовали закрытый ключ, чтобы доказать, что сертификат , который вы распространяете, принадлежит вам. Например, с использованием цифровой подписи в документе.

Надеюсь, что это поможет!

+0

Спасибо! Просто уточните, могу ли я это сделать? Вы сказали: «Это считается« публичным ». Поэтому я могу распространять файл .p12 (через защищенный канал), и если я предоставляю пароль, люди могут (1) использовать это, чтобы подтвердить мое имя/адрес электронной почты (2) шифровать информацию, предназначенную исключительно для меня, и (3) не может нарушить/получить доступ к «закрытому ключу» в результате его распространения? – JDubya13

+1

Нет. Только СЕРТИФИКАТ считается общедоступным. Вы не должны распространять .p12-файл кому-либо, так как он содержит ваш закрытый ключ. Сохраните ЧАСТЫЙ ключ PRIVATE и сделайте PUBLIC (или сертификат) PUBLIC. Вы НИКОГДА не хотите распространять закрытый ключ или файл PKCS # 12 (.p12). Только сертификат. – Shadowman

+1

PKI - это тяжелое поле. Я собираюсь рискнуть глупо, я понял, что файл .p12 был моим сертификатом? Нужно ли мне «извлекать» сертификат из этого файла для распространения для проверки? – JDubya13

0

Сертификат - это фактически блок информации, который связывает вашу личность (то есть ваше имя, адрес электронной почты и все остальное) с каким-либо открытым ключом. Это общедоступно, поэтому каждый может знать, что этот ключ принадлежит вам. Итак, когда вы подпишете что-то, они узнают, что на самом деле вы подписали это. Другая вещь - проверка сертификата - это то, для чего используются доверенные корневые сертификаты.

Закрытый ключ - это ваша собственная секретная информация, и ДОЛЖНА храниться в секрете.

+0

А, я вижу. Так что я прав, говоря, что я буду распространять свой открытый ключ как обычно, но если это/я должен быть проверен, я могу предоставить свой сертификат, чтобы подтвердить, кто я? Если это так, следует ли защищать сертификат с помощью другого пароля, кроме Закрытого ключа? Поэтому мой Priaae Key остается полностью закрытым. – JDubya13

+0

Сертификат - это ваш открытый ключ. И он не должен быть защищен паролем. Он должен быть распределен по доверенному каналу или должен быть подписан корневым сертификатом, которому доверяют другие стороны. –

+0

Не понимаю. Ключевое поколение создало три отдельные части. Закрытый ключ, открытый ключ и сертификат, который я сохранил с расширением .p12. Я могу импортировать и просматривать это.p12 с помощью диспетчера сертификатов Windows. Мой открытый ключ отформатирован, так как я ожидаю увидеть открытый ключ, но я не могу создать сертификат без пароля, и он впоследствии будет зашифрован. Я распространяю свой фактический открытый ключ (содержащий BEGIN/END PUBLIC KEY header/footer), который используется для шифрования. Как этот дополнительный файл (сертификат) мой открытый ключ? Извиняюсь, если мне не хватает смысла. – JDubya13

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