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