缓存的SSL会话是否包含以前的X.509证书信息?

时间:2018-05-09 09:56:54

标签: c ssl openssl libressl session-cache

当我们重新使用之前保存的SSL_SESSION时, 重用的SSL会话是否具有orignal X.509对等证书?

我的代码很少崩溃,调查显示 重用SSL会话,并且对等证书(certinfo->key->pkey)的某些字段搞砸了。

  • 从CLT到SVR的第一次握手。

    SVR将X.509证书发送到CLT,CLT存储证书。 我们可以使用SSL_get_peer_certificate()获取证书。 CLT使用SSL_SESSION保存SSL_get1_session()

  • 从CLT到SVR的第二次握手。

    这次CLT通过SSL_SESSION提供了保存的SSL_set_session() 和缩写握手发生。 当CLT调用SSL_get_peer_certificate()时,CLT可以获得原始版本 X.509证书?

似乎与SSL_SESSION和包含的对等X.509证书的耦合是松散的。除了仅调用SSL_get1_session之外,我们是否应该明确地使用upping refcnt保存X.509对等证书,以便在重用的SSL_get_peer_certificate()上正确使用SSL_SESSION

我在Linux上使用LibreSSL和OpenSSL。

任何评论都会深深感激。

1 个答案:

答案 0 :(得分:0)

如果您看到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被序列化时,对等证书将丢失