【问题标题】:iOS Receipt Validation d2i_X509_bio returning NULLiOS 收据验证 d2i_X509_bio 返回 NULL
【发布时间】:2014-03-13 04:41:23
【问题描述】:

我在 App Store 中有一个付费应用,我正在下一个版本中实施收据验证。

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

由于某种原因,d2i_X509_bio() 在后面的 sn-p 中总是返回 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);

有人知道怎么回事吗?

【问题讨论】:

  • 调用d2i_X509_bio时,ERR_get_error返回的错误码是什么?收到错误代码后,请使用 openssl errstr 0xNNNN 将其转换为可读的内容。

标签: ios openssl x509


【解决方案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

希望这对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多