Содержит ли кэшированный сеанс 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()
и сокращенное рукопожатие произошло. Когда звонит CLTSSL_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, сертифицированный одноранговый узел будет потерян