Ответ
Цифровые сертификаты не шифруются в традиционном смысле, а подписываются с использованием асимметричной криптографии для обеспечения целостности и аутентичности.
Ключевой процесс:
- Центр сертификации (CA) создает хэш данных сертификата (открытый ключ владельца, информация о субъекте и т.д.).
- CA шифрует этот хэш своим закрытым ключом, создавая цифровую подпись.
- Подпись добавляется к сертификату.
Проверка: Любой может проверить подлинность сертификата, расшифровав подпись открытым ключом CA и сравнив результат с самостоятельно вычисленным хэшем сертификата.
Пример создания самоподписанного сертификата в Java:
// 1. Генерация пары ключей
KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA");
keyGen.initialize(2048);
KeyPair keyPair = keyGen.generateKeyPair();
// 2. Создание и подписание сертификата (используется закрытый ключ)
X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();
// ... установка полей сертификата (субъект, издатель, серийный номер, срок действия)
certGen.setPublicKey(keyPair.getPublic());
certGen.setSignatureAlgorithm("SHA256WithRSA");
// Самоподпись: закрытый ключ используется для подписи
X509Certificate cert = certGen.generate(keyPair.getPrivate());
Стандартные алгоритмы подписи: SHA256withRSA, SHA384withECDSA.