iOS证书一览
本文首发于here
开发者计划
关于不同计划的对比:
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三种。
-
Development
选择开发证书,只支持在注册过UDID,并加入到PP文件中的设备上运行。可以直接在Xcode上运行,或者通过ipa安装包方式安装;
创建时,选择开发证书以及对应设备; -
Ad hoc
选择发布证书,通过Archive方式打包,同样只支持在注册过UDID,并加入到PP文件中的设备上运行。可以直接在Xcode运行,但是不能调试,通过IPA包直接分发;
创建时,选择发布证书以及对应设备; -
Dictribution
选择发布证书,通过Archive方式打包,只能在上架后,支持任何设备安装,可以直接在Xcode运行,但是不能调试,通过App Store分发;
创建时,选择发布证书,且无需选择设备;
Apple 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
服务器使用的推送证书
- 导出
.cer
证书文件
选中“Login”和“My Certificates” ,导出退送证书时要选中证书文件,不要展开private key。命名为:
aps_development.cer
- 导出
.p12
私钥文件
选中推送证书的私钥文件,注意导出为.p12
文件,命名为:aps_push.p12
这一步,需要我们输入一个自定义的密码,可简可繁,但是千万要记住!
- 转换为
.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平台所用的密码!所以,推荐所有密码一致,以防混淆。
- 合并
.pem
文件
合并上一步得到的两个文件:
cat aps_development.pem aps_push.pem > push.pem
- 测试
为了测试证书是否工作,执行下面的命令:
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方式发布指南
Five Tips for Using Self Signed SSL Certificates with iOS
Understanding iOS Certificates
证书问答
-
Code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 8.0'
-
苹果证书 “此证书的开发者无效” missing ios distribution signing identity
选中证书->显示简介->信任->使用此证书时,选择“始终信任”
- The application could not be verified
简言之:(1)删掉device 里对应的app,重新运行(2)或者选择该app对应的证书和code signing(3)或者修改bundle id