Различные статьи в Интернете привели меня к мысли, что общее имя сертификата сервера должно точно соответствовать корневому URL-адресу, для которого он действителен. Однако, когда я смотрю на кучу файлов в / etc / ssl / certs с помощью команды openssl x509 -inform PEM -in <certfile.pem> -text
, Я вижу, что значение CN обычно представляет собой удобочитаемое описание сайта (например, "Google Internet Authority"), а не доменное имя. Фактически, я не вижу ни в одном из файлов ничего, похожего на доменное имя или IP-адрес, ни в них, ни в выводе из openssl s_client -connect <ip>
.
Итак, неправильно ли я понимаю «общее имя»? Как мне получить URL-адрес сертификата, для которого сертификат действителен?
Да и нет. Вы правы (за исключением некоторых дополнительных деталей) для сертификатов сервера. Однако сертификаты в / etc / ssl / certs являются промежуточными и корневыми сертификатами CA, а не сертификатами сервера. То есть они не используются напрямую для идентификации сервера. Таким образом, у них нет такой проблемы сопоставления.
Сертификаты серверов, те, которые серверы фактически представляют клиенту, имеют соответствующую проблему и являются тем, что вы видите в первом сертификате, который вы получаете при подключении. Если вы посмотрите на другие сертификаты в цепочке сборок openssl (и выплюнет вам), вы увидите ссылки на стиль сертификатов / etc / ssl / certs.
Сам CN может не совпадать, если вместо этого совпадает одно из альтернативных полей, определенных как допустимые. Среди методов добавления дополнительных действительных имен для сопоставления сертификатов - использование расширения subjectAltName с типом dNSName, которое затем указывает, какое действительное имя должно соответствовать (по крайней мере, для целей HTTPS). Есть и другие для других целей.