【问题标题】:PEM_write_X509(x509 *) and crash in multi threaded processPEM_write_X509(x509 *) 并在多线程进程中崩溃
【发布时间】:2016-09-23 09:39:15
【问题描述】:

我正在使用PEM_write_X509(x509*) 编写连接到 SSL 服务器时收到的证书。这在单线程环境中有效,但在多线程环境中失败。

PEM_write_X509_AUX()PEM_write_X509() 有什么区别?

只使用write() 调用转储证书可以吗?

还有其他选项可以在多线程应用程序中写入证书文件吗?

【问题讨论】:

  • “这在单线程环境中工作,但在多线程环境中失败。” - 您可以显示安装锁的代码。但我认为没有它这些问题是可以回答的。就个人而言,我会解决多线程崩溃问题,因为您可能还有其他问题。应用中的崩溃可能只是一个症状或实例问题。
  • “只使用 write() 调用转储证书可以吗?” - 这是一个很大的问题。 X509* 是一种内存数据结构。它是一种内部表示,并不意味着要序列化。如果你尝试,你会看到一些证书数据和很多指针。您需要像PEM_write_bio_X509 这样的例程以 PEM 序列化,i2d_X509_bio 以 ASN.1/DER 格式序列化。
  • 是的。我完全同意....

标签: openssl x509 pem


【解决方案1】:

使用以下代码而不是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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多