2013-04-05 3 views
0

Моя задача - проанализировать имя сервера из сообщений HTTPS. Меня попросили разобрать его из расширений «клиент привет», а также из поля «certicate», «commonname».Несколько сертификатов в сообщении «сертификат» TLS «сертификат»

В сообщении «сертификат» имеется несколько сертификатов. Например, при открытии google с https и прослушивании этого через wirehark я вижу, что у 2-х сертификатов сначала есть общее имя «* .google.com», а во втором - общее имя «Google Internet Authority». Первый - это имя сервера, с которым я подключил второй, - это полномочия, которые подписали сертификат.

Мой вопрос: могу ли я быть уверенным, что имя сервера (google.com в моем случае) всегда будет в первом сообщении сертификата. Нужно ли мне заботиться о других сертификатах в сообщении сертификата, если я хочу получить только имя сервера.

+1

Порядок может отличаться, поэтому вам нужно получить все сертификаты и найти, какой из них является конечным объектом. –

ответ

2

В самом деле, RFC 2246, 4346 и 5246 (соответственно TLS 1.0, TLS 1.1 и TLS 1.2) все состояния, что сертификат сервера должен быть первым:

«Это последовательность (цепь) сертификатов X.509v3. Сертификат отправителя должен быть первым в списке. Каждый последующий сертификат должен непосредственно сертифицировать тот, который предшествует ему ».

Было также ясно, в SSL 3.0:

"certificate_list: Это последовательность (цепь) X.509.v3
сертификаты, заказал с сертификатом отправителя первым последующим
путем любые сертификаты органа сертификации, действующие последовательно
вверх. "

Но в реальном мире существует множество неправильно сконфигурированных серверов, отправляющих сертификаты в любом порядке, поэтому вам придется их переупорядочить, извините.

+0

То, что меня сбивало с толку: «Сертификат отправителя должен быть первым в списке». У вас есть совет по шаблону, чтобы переупорядочить их. –

+2

@KadirErdemDemir, ищите DN и имя субъекта в каждом сертификате: DN субъекта следующего сертификата, удостоверяющего предшествующий ему, должен быть DN эмитента этого предшествующего сертификата. – Bruno