1

当我们重用之前保存SSL_SESSION的,重用的 SSL 会话是否有原始的 X.509 对等证书?

我的代码很少崩溃,调查显示 SSL 会话被重用,并且 peer cert( certinfo->key->pkey) 的某些字段被弄乱了。

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

    SVR 向 CLT 发送 X.509 证书,CLT 存储该证书。我们可以使用SSL_get_peer_certificate(). CLT 保存SSL_SESSIONSSL_get1_session().

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

    这次 CLT 提供保存SSL_SESSIONSSL_set_session() 发生了简短的握手。当 CLT 调用时SSL_get_peer_certificate(),CLT 可以得到原始的 X.509 证书吗?

似乎与SSL_SESSION对等 X.509 证书的耦合并包含在内是松散的。除了调用 just 之外,我们是否应该通过显式提升 refcnt 来保存 X.509 对等证书以在重用SSL_get1_session时正确使用?SSL_get_peer_certificate()SSL_SESSION

我在 Linux 上使用 LibreSSL 和 OpenSSL。

任何意见将不胜感激。

4

1 回答 1

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

于 2018-05-09T10:36:39.097 回答