Содержит ли кэшированный сеанс SSL информацию о предыдущем сертификате X.509? - PullRequest
0 голосов
/ 09 мая 2018

Когда мы повторно используем ранее сохраненные SSL_SESSION, имеет ли повторно используемый сеанс SSL оригинальный сертификат X.509?

Мой код вылетает очень редко, и расследование показало, что сеанс SSL используется повторно, и некоторые поля сертификата однорангового узла (certinfo->key->pkey) перепутаны.

  • 1-е рукопожатие от CLT до SVR.

    SVR отправляет сертификат X.509 в CLT, а CLT сохраняет сертификат. Мы можем получить сертификат, используя SSL_get_peer_certificate(). CLT сохраняет SSL_SESSION с SSL_get1_session().

  • 2-е рукопожатие от CLT до SVR.

    На этот раз CLT предлагает сохраненные SSL_SESSION с SSL_set_session() и сокращенное рукопожатие произошло. Когда CLT вызывает SSL_get_peer_certificate(), может ли CLT получить оригинал Сертификат X.509?

Кажется, что связь с SSL_SESSION и включенным сертификатом peer X.509 ослаблена. Должны ли мы сохранять одноранговый сертификат X.509 с явным повышением refcnt, в дополнение к вызову SSL_get1_session просто для правильного использования SSL_get_peer_certificate() для повторно используемых SSL_SESSION?

Я использую LibreSSL и OpenSSL в Linux.

Любые комментарии будут высоко оценены.

1 Ответ

0 голосов
/ 09 мая 2018

Если вы видите код openssl, вы найдете этот комментарий в объявлении SSL_SESSION, где написано:

/* This is the cert for the other end.
 * On clients, it will be the same as sess_cert->peer_key->x509
 * (the latter is not enough as sess_cert is not retained
 * in the external representation of sessions, see ssl_asn1.c). */
X509 *peer;

Я бы предположил, что это указывает для клиентов, что сертификат однорангового узла не сохраняется при преобразовании во внешнее представление, т. Е. При сериализации SSL_SESSION сертификат однорангового узла будет утерян

...