Шифруется ли содержимое SSL/TLS сертификата?

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

Ответ

Нет, содержимое SSL/TLS сертификата (X.509) не шифруется. Сертификат является открытым документом и содержит информацию, предназначенную для всеобщего ознакомления.

Что делает сертификат доверенным? Он цифрово подписывается Удостоверяющим Центром (Certificate Authority, CA) с использованием его приватного ключа. Подпись удостоверяет подлинность данных в сертификате.

Структура сертификата включает:

  • Открытый ключ владельца сертификата.
  • Метаданные: Идентификатор субъекта (домен, организация), издатель (CA), срок действия, алгоритм подписи.
  • Цифровая подпись CA, вычисленная от хэша всех вышеперечисленных полей.

Пример проверки сертификата в Java:

// Чтение сертификата из файла
CertificateFactory cf = CertificateFactory.getInstance("X.509");
FileInputStream fis = new FileInputStream("server.crt");
X509Certificate certificate = (X509Certificate) cf.generateCertificate(fis);

// Проверка данных (открытая информация)
System.out.println("Subject: " + certificate.getSubjectX500Principal());
System.out.println("Issuer: " + certificate.getIssuerX500Principal());
System.out.println("Public Key Algorithm: " + certificate.getPublicKey().getAlgorithm());

// Верификация подписи CA (использует открытый ключ CA)
certificate.verify(caPublicKey); // Бросает исключение, если подпись неверна

Где происходит шифрование? Шифрование применяется на уровне TLS-сессии для защиты передаваемых данных, но сам сертификат передаётся по сети в открытом виде в процессе handshake.