iOS证书一览

作者: wenghengcong | 来源:发表于2016-09-02 18:02 被阅读790次

    本文首发于here

    开发者计划

    Memeership Support

    关于不同计划的对比:

    Developer Program Support

    申请

    Apple Developer Program

    Apple Developer Program:苹果开发者计划,针对个人以及公司,个人通过提交相关信息可以升级为公司账号。

    • 针对个人/公司;
    • 99$/y;
    • Ad Hoc测试设备均为100台/y;
    • 通过App Store发布应用;
    • 个人以个人名义发布、出售App;
    • 公司以公司实体名称发布、出售App;
    • 个人账户可通过提交公司资质以及邓白氏码转换为公司账户;
    • 公司账户支持开发团队成员设置;

    Apple Developer Enterprise Program

    Apple Developer Enterprise Program:苹果开发者企业计划,针对企业组织(不包括公司)。

    • 针对企业
    • 299$/y
    • Ad Hoc测试设备均为100台/y
    • 不能在App Store发布应用,只能通过in-house企业内部分发;
    • 申请需要提交公司资质以及邓白氏码;
    • 支持团队成员设置,关于企业开发人员角色。传送门

    iOS那令人又气又恼的各种证书

    登录开发者会员中心,在这儿,有下面的列表:

    1.App ID

    这是每一个应用的独立标识,在设置项中可以配置该应用的权限,比如是否用到了PassBook,GameCenter,以及更常见的push服务,如果选中了push服务,那么就可以创建生成下面所提到的推送证书,所以,在所有和推送相关的配置中,首先要做的就是先开通支持推送服务的App ID;

    2.开发者证书

    开发者证书(分为开发和发布两种,类型为iOS Development,iOS Distribution),这个是最基础的,不论是真机调试,还是上传到appstore都是需要的,是一个基证书,用来证明自己开发者身份的;

    • 开发证书:iOS Development,用于开发者真机调试;
    • 发布证书:iOS Distribution,用于发布应用;

    3.推送证书

    推送证书也分为开发和生产两种,类型分别为APNs Development iOS,APNs Production iOS,该证书在appID配置中创建生成,和开发者证书一样,安装到开发电脑上;

    关于开发者证书和推送证书的创建,可以看到开发和生产环境下不同的证书:

    • 开发环境证书:APNs Development iOS,用于开发阶段测试,发布应用不能选择该证书,否则会被驳回;
    • 生产环境证书:APNs Production iOS,用于发布后生产环境。

    4.Devices

    苹果的测试证书、发布证书以及推送证书都有对应的Provisioning Profile文件,来验证当前开发者当前应用是否能在真机设备上测试、安装或运行。为此,就需要开发者将需要在开发中进行测试或者需要安装IPA包的真机设备的UDID注册,并生成对应的Provisioning Profiles,这样真机设备才能用于测试或者安装。

    5.Provisioning Profiles

    一般称之为PP文件,该文件将App ID、开发者证书、设备绑定到一块儿,在开发者中心配置好后可以添加到Xcode上,也可以直接在Xcode上连接开发者中心生成,真机调试时需要在PP文件中添加真机的UDID。

    需要注意的是!

    PP文件,Apple Developer Program计划支持Developement、Ad Hoc、Distribution三种。

    Apple Developer Enterprise Program支持Developement、Ad Hoc、In-house三种。

    1. Development

      选择开发证书,只支持在注册过UDID,并加入到PP文件中的设备上运行。可以直接在Xcode上运行,或者通过ipa安装包方式安装;
      创建时,选择开发证书以及对应设备;

    2. Ad hoc

      选择发布证书,通过Archive方式打包,同样只支持在注册过UDID,并加入到PP文件中的设备上运行。可以直接在Xcode运行,但是不能调试,通过IPA包直接分发;
      创建时,选择发布证书以及对应设备;

    3. Dictribution

      选择发布证书,通过Archive方式打包,只能在上架后,支持任何设备安装,可以直接在Xcode运行,但是不能调试,通过App Store分发;

      创建时,选择发布证书,且无需选择设备;

    Apple Support

    Developer Account

    Certificates Support

    Code Signing Support

    证书制作过程

    创建开发者证书

    证书签名请求文件(CSR)

    常用名称出现在证书对应的专用密钥中,如下图:
    备注:CSR文件尽量每个证书都制作一次,将常用名称区分开来,因为该常用名称是证书中的密钥的名字;

    制作完毕之后,保存“CertificateSigningRequest.certSigningRequest”文件。

    登录Apple Developer,一定要使用Safari浏览器!

    进入证书管理中心:

    下面开始创建证书:

    可以看到下图中,关于Development中有两种类型的证书:

    一种是开发者证书,另外一种是开发环境推送证书。

    同样,在Production中,证书种类更多,我们还是只关注App Store and Ad hoc以及Apple Push Notification service SSL(Procudtion)这两种类型。

    值得一提的是,在企业开发者计划中,App Store and Ad hoc响应替换为In-house Ad Hoc

    上面的过程即完整的创建了证书。

    下载、安装证书

    下载得到后缀为.cer的文件。
    发现:此证书是由未知颁发机构签名的!

    原因:
    之前在keychain(钥匙窜访问)中多删了一个证书:Apple Woldwide Developer Relations Certification Authority,它是iPhone Developer证书的签发者,如果它被删除就会导致iPhone Developer证书被识别为未知颁发机构签名,然后xcode中真机调试就会出现上面的错误。

    解决方案:
    重新把AppleWWDRCA放回去;从Apple官网(http://developer.apple.com/certificationauthority/AppleWWDRCA.cer)下载一个,下载后拖入keychain(钥匙串访问)-登录目录。

    创建App ID

    生成App ID之后,我们可以修改,所以下一步,我们要添加推送证书。

    创建推送证书

    点击Edit之后,进入push证书设置:

    进入:Development SSL Certificate

    剩下的步骤,即重复上面生成iOS Development证书的步骤,先制作一个证书签名文件(CSR),然后制作Push证书。最后看到这个:

    下载证书即可。
    当然,我们一步只完成了Development SSL Certificate,还有Production SSL Certificate,上图的“Add Another”即可快速添加另一个证书。此处就略。

    注册设备

    查看手机的UUID
    电脑连接上手机,打开iTunes,选择摘要:

    一开始,看不到UUID号,连续点击序列号的位置,就会变换出现UUID和其他信息,如:

    当然也可以通过Xcode查看iPhone,前提是你的设备已经通过Xcode连接过,所以Xcode会保留你的设备信息,Window->Devices:
    如下:

    填写UUID和自己想命名的设备名即可完成注册设备。

    生成Provisioning Profile文件

    生成用于真机测试的pp文件:

    生成用于提交的pp文件:

    更多关于推送证书的Tips

    服务器使用的推送证书

    1. 导出.cer证书文件

    选中“Login”和“My Certificates” ,导出退送证书时要选中证书文件,不要展开private key。命名为:
    aps_development.cer

    1. 导出.p12私钥文件

    选中推送证书的私钥文件,注意导出为.p12文件,命名为:aps_push.p12

    这一步,需要我们输入一个自定义的密码,可简可繁,但是千万要记住!

    1. 转换为.pem文件

    上面两个文件都要先转换为.pem文件,最终要将转换后的两个.pem文件合并为一个.pem文件。

    aps_development.cer转换为.pem文件:

    openssl x509 -in aps_development.cer -inform der -out aps_development.pem
    

    aps_push.p12转换为.pem文件:

    openssl pkcs12 -nocerts -out aps_push.pem -in aps_push.p12
    

    这里首先需要我们输入在第二步导出私钥文件中定义的密码。其次,还需要为新生成的pem文件设置一个密码。此密码为上传PUSH平台所用的密码!所以,推荐所有密码一致,以防混淆。

    1. 合并.pem文件

    合并上一步得到的两个文件:

    cat aps_development.pem aps_push.pem > push.pem
    
    1. 测试

    为了测试证书是否工作,执行下面的命令:

    telnet gateway.sandbox.push.apple.com 2195
    

    它将尝试发送一个规则的,不加密的连接到APNS服务。如果看到下面返回,即能够到达APNS。按下Ctrl+C关闭连接。

    Trying 17.172.232.46...
    Connected to gateway.sandbox.push-apple.com.akadns.net.
    Escape character is '^]'.
    

    这一步确定的是APNs是可访问的,下面将要确定证书是否正确:

    openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert push.pem -key push.pem
    

    首先会要求你输入密码,即私钥那一步生成的密码。

    假如输出:

    CONNECTED(00000003)
    depth=1 /C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
    verify error:num=20:unable to get local issuer certificate
    verify return:0
    ---
    Certificate chain
     0 s:/C=US/ST=California/L=Cupertino/O=Apple Inc./CN=gateway.sandbox.push.apple.com
       i:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
     1 s:/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
       i:/O=Entrust.net/OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Certification Authority (2048)
    ---
    Server certificate
    -----BEGIN CERTIFICATE-----
    证书内容
    -----END CERTIFICATE-----
    subject=/C=US/ST=California/L=Cupertino/O=Apple Inc./CN=gateway.sandbox.push.apple.com
    issuer=/C=US/O=Entrust, Inc./OU=See www.entrust.net/legal-terms/OU=(c) 2012 Entrust, Inc. - for authorized use only/CN=Entrust Certification Authority - L1K
    ---
    Acceptable client certificate CA names
    /C=US/O=Apple Inc./OU=Apple Certification Authority/CN=Apple Root CA
    /C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
    /C=US/O=Apple Inc./OU=Apple Certification Authority/CN=Apple Application Integration Certification Authority
    ---
    SSL handshake has read 3202 bytes and written 2177 bytes
    ---
    New, TLSv1/SSLv3, Cipher is AES256-SHA
    Server public key is 2048 bit
    Secure Renegotiation IS supported
    Compression: NONE
    Expansion: NONE
    SSL-Session:
        Protocol  : TLSv1
        Cipher    : AES256-SHA
        Session-ID:
        Session-ID-ctx:
        Master-Key: 55D12EFFB2DCFE0DE4A1E81013A1B511B919C080A4A2128D97ED87DAAD541055227DDEA33846B13E861A77BAACA6E6C0
        Key-Arg   : None
        Start Time: 1468981758
        Timeout   : 300 (sec)
        Verify return code: 0 (ok)
    ---
    

    表明,证书有效,连接成功。

    更多关于企业证书的Tips

    未整理

    Provision iOS IPA App for In-House Enterprise Distribution

    【iOS开发】企业版证书($299)In-House方式发布指南

    苹果企业级证书IDP申请流程

    iOS证书申请和APP上传到apple store

    Five Tips for Using Self Signed SSL Certificates with iOS

    Understanding iOS Certificates

    证书问答

    1. Code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 8.0'

    2. No code signing identities found

    3. 苹果证书 “此证书的开发者无效” missing ios distribution signing identity

    选中证书->显示简介->信任->使用此证书时,选择“始终信任”

    1. The application could not be verified

    解决方案

    简言之:(1)删掉device 里对应的app,重新运行(2)或者选择该app对应的证书和code signing(3)或者修改bundle id

    1. Create iOS “In-House and Ad Hoc” certificate option disabled

    相关文章

      网友评论

        本文标题:iOS证书一览

        本文链接:https://www.haomeiwen.com/subject/ygqkettx.html