Содержит ли кэшированный сеанс SSL информацию о предыдущем сертификате X.509?

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

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

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

1 ответ

Если вы видите код 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, сертифицированный одноранговый узел будет потерян

Другие вопросы по тегам