iOS收据验证d2i_X509_bio返回NULL

时间:2014-03-13 04:41:24

标签: ios openssl x509

我在App Store中有一个付费的应用程序,我正在下一个版本中实施Receipt Validation。

在我的手机上,我从App Store(没有收据验证)下载了我的应用程序,并且正在将下一个版本编译到我的iPhone上以测试我的Receipt Validation实施。

出于某种原因,d2i_X509_bio()始终在以下代码段中返回NULL。

NSData * appleRootCert = [NSData dataWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"AppleIncRootCertificate" withExtension:@"cer"]];
BIO * b_appleRootCert = BIO_new_mem_buf((void *)[appleRootCert bytes], (int)[appleRootCert length]);
X509 * x509_appleRootCert = d2i_X509_bio(b_appleRootCert, NULL);

有谁知道发生了什么事?

1 个答案:

答案 0 :(得分:1)

使用以下两行代码后:

ERR_load_crypto_strings();
char * data = ERR_error_string(ERR_get_error(),NULL);

我能够发现我下载的证书是.PEM格式,而函数需要.DER格式。我只是使用以下命令行转换我的证书:

openssl x509 -in AppleIncRootCertificate.cer -outform der -out cert.der
mv cert.der AppleIncRootCertificate.cer

希望这有助于其他人。