检查供应配置文件的开发人员证书有效性

Doa*_*Doa 5 iphone openssl certificate ios ios-provisioning

我想允许客户上传他们自己的配置文件,包括图标,以便我可以随时将它们作为我的应用程序的自定义版本,然后他们可以发布.

但是,我在验证配置文件时遇到了一些麻烦.特别是,我想检查DeveloperCertificate是否真的是一个有效的证书.该配置文件看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ApplicationIdentifierPrefix</key>
    <array>
        <string>ABCDEFGH</string>
    </array>
    <key>CreationDate</key>
    <date>2012-03-28T11:17:23Z</date>
    <key>DeveloperCertificates</key>
    <array>
        <data>
        MIIFajCCBFKgAwIBAgIIddUra9YprMQwDQYJKoZIhvcNAQEFBQAwgZYxCzAJ
        BgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBs
        ZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBw
        ...     
        </data>
    </array>
    ...
</dict>
Run Code Online (Sandbox Code Playgroud)

因此,我提取证书,然后想要检查它们,最好使用openssl命令.这些证书使用的加密是什么,如何使用openssl验证它们?我认为这使用pkcs12,但尝试这给我一个错误:

$ openssl pkcs12 -noout -in testcertificate
140653159306912:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1319:
140653159306912:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS12
Run Code Online (Sandbox Code Playgroud)

谁能指出我正确的方向?我必须以某种方式验证开发人员证书的有效性.

谢谢

Doa*_*Doa 8

我一直在研究这个问题,事实证明它并不像大卫描述它那么难.解决方案实际上非常简单:

证书是base64编码的DER证书.您需要做的是以下内容:

  • 从XML中提取证书
  • Base64-解码证书:

    base64 -d certificate> certificate.crt

  • 使用OpenSSL测试证书:

    openssl x509 -inform DER -in certificate.crt -noout -text

或者,如果我们管道它:

cat certificate | base64 -d - | openssl x509 -inform DER -noout -text
Run Code Online (Sandbox Code Playgroud)

-text选项使openssl提供所有细节,但您可以根据自己的意愿指定.例如,假设您只关心证书是否是实际的分发证书,您可以使用该-subject选项并查看该CN=字段.

  • 至少在我的安装OS X 10.7.4上,`/ usr/bin/base64`需要`-D`而不是`-d`来进行解码.这意味着完整的命令是`cat certificate | base64 -D - | openssl x509 -inform DER -noout -text`. (2认同)