Самозаверяющие сертификаты X.509
Я пытаюсь понять больше о цифровых сертификатах X.509. Кажется, вокруг много противоречий. я использую Bouncy Castle
сгенерировать пару ключей, используя
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
хранится там. Тогда в этой статье говорится, что сертификат действительно содержит PRIVATE KEY
,
Я думаю, у меня есть два вопроса, которые, надеюсь, помогут мне понять это:
- Если я сгенерирую свои ключи таким образом, должен ли пароль быть ТАКИМ ЖЕ в качестве парольной фразы для
PRIVATE KEY
? - Нужно ли распространять сертификат X.509 для подтверждения
PUBLIC KEY
принадлежит мне (в паре с моим именем в сертификате) или сертификат должен храниться в тайне и секретностиPRIVATE KEY
а для чего нужен самоподписанный сертификат?
2 ответа
Файл PKCS#12 может содержать как сертификат, так и закрытый ключ. Они, однако, хранятся как отдельные, отдельные объекты. В самом сертификате есть открытый ключ. Поскольку сертификат содержит только открытый ключ, он также считается "открытым". Вы можете свободно распространять сертификат, так как он не содержит секретного ключа, который следует хранить в тайне. Это основа безопасности в асимметричной криптографии.
Поскольку файл PKCS#12 содержит оба элемента, он зашифрован паролем для защиты закрытого ключа внутри него. При этом вы будете использовать закрытый ключ, чтобы доказать, что распространяемый вами сертификат принадлежит вам. Например, с помощью цифровой подписи на документе.
Надеюсь, это поможет!
Сертификат на самом деле является блоком информации, который связывает вашу личность (например, ваше имя, адрес электронной почты и т. Д.) С каким-либо открытым ключом. Это общедоступно, поэтому каждый может знать, что этот ключ принадлежит вам. Поэтому, когда вы что-то подпишете, они узнают, что на самом деле вы подписали это. Другое дело - проверка сертификата - это то, для чего используются доверенные корневые сертификаты.
Закрытый ключ - это ваша собственная секретная информация, и она ДОЛЖНА храниться в секрете.