Как шифруются цифровые сертификаты?

«Как шифруются цифровые сертификаты?» — вопрос из категории Безопасность, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Цифровые сертификаты не шифруются в традиционном смысле, а подписываются с использованием асимметричной криптографии для обеспечения целостности и аутентичности.

Ключевой процесс:

  1. Центр сертификации (CA) создает хэш данных сертификата (открытый ключ владельца, информация о субъекте и т.д.).
  2. CA шифрует этот хэш своим закрытым ключом, создавая цифровую подпись.
  3. Подпись добавляется к сертификату.

Проверка: Любой может проверить подлинность сертификата, расшифровав подпись открытым ключом 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.