0
我使用PEM_write_X509(x509*)
来编写连接到SSL服务器时收到的证书。这在单线程环境中工作,但在多线程环境中失败。PEM_write_X509(x509 *)和多线程进程崩溃
PEM_write_X509_AUX()
和PEM_write_X509()
有什么区别?
只需使用write()
调用转储证书就可以吗?
是否有其他选项可以在多线程应用程序中编写证书文件?
我使用PEM_write_X509(x509*)
来编写连接到SSL服务器时收到的证书。这在单线程环境中工作,但在多线程环境中失败。PEM_write_X509(x509 *)和多线程进程崩溃
PEM_write_X509_AUX()
和PEM_write_X509()
有什么区别?
只需使用write()
调用转储证书就可以吗?
是否有其他选项可以在多线程应用程序中编写证书文件?
我能够解决此问题后,使用下面的代码而不是PEM_write_X509()
。
X509 *cert = GetPeerCertificate(hostname, port);
if(cert)
{
unsigned char *data;
unsigned int len = 0;
BIO *bio = BIO_new(BIO_s_mem());
PEM_write_bio_X509(bio, cert);
len = BIO_get_mem_data(bio, &data);
if(0 != Writeile(certificate_file, data, len))
{
ret = ERROR;
}
BIO_free(bio);
}
*“这是在单线程环境中工作,但在多线程环境中失败。”* - 你可以显示你的代码来安装锁。但是我认为如果没有它的话,问题是可以回答的。就我个人而言,我会处理多线程崩溃问题,因为您可能有其他问题。应用程序崩溃可能只是一个症状或实例问题。 – jww
***“使用write()调用转储证书会好吗?”*** - 这是一个很大的NO。 'X509 *'是内存数据结构。它是一个内部表示,并不意味着被序列化。如果你尝试,你会看到一些证书数据和很多指针。您需要像PEM_write_bio_X509'这样的例程在PEM中序列化,'i2d_X509_bio'以ASN.1/DER格式序列化。 – jww
是的。我完全同意.... – Naga