苹果证书实际应用的一些理解

###开发者账号

在开发过程中,我用到了2种类型的开发者账号

  • in-house账号
  • company账号

其中in-house账号是用于企业级的发布操作,不用上传appstore就可以让任何一台机器运行打出来的包

company账号则用于打包上传appstore

###证书(Certificates),appid,设备(Device),配置文件(Provisioning Profiles)之间的关系

无论是in-house账号还是company账号,都会有对应的证书,设备,appid,和配置文件

  • 证书分类(Certificates):生产环境证书(Production),开发者环境证书(Development),还有appid下的推送证书

  • appid:一般与工程的bundleId对应,有2种:通配id(Wildcard),如com.domainname.*,在对应到工程的bundleId时星号可以是随意。明确的id(Explicit) ,如com.domainname.name,在工程中,bundleId对应只能填入com.domainname.name。

  • 推送证书:包括开发环境推送证书,生产环境推送证书。推送证书会对应appid,不同的appid会有不同的推送证书

  • 设备(Device): 已经注册到in-house或者company账号下的设备,如iphone,touch,watch等等

  • 配置文件(Provisioning Profiles) : 利用配置文件,将证书,项目工程将要用到的设备,和项目bundleId对应的appid绑定在一起。

这么多东西,都是为了生成配置文件,然后用作项目打包或者真机调试用。

1.打生产环境包:用 生产环境证书 + appid(包含了推送证书设置) + 设备(可选) = 配置文件 来打包

2.真机调试:用 开发环境证书 + appid(包含了推送证书设置) + 设备 = 配置文件 来真机调试

###证书,appid,配置文件的生成
知道证书,appid,配置文件的关系之后,就可以生成了

百度知道上面有比较全面生成教学

注意这些生成的.csr,.cer,.p12文件要好好保存不要随意丢弃。.cer文件不见了可以在member center中下载

###APNs推送
1.几个概念

自己服务器向设备推送的过程。
自己服务器向设备推送的过程

  • deviceToken:每个设备(如你的iphone)唯一的token,从APNs服务器取得
  • provider:我们自己的服务器
  • 保证自己的服务器被APNs信任(需要appid对应推送证书与p12生成的pem文件)
  • 保证自己的设备被APNs信任(appid设置了对应推送证书)

官方文档这里描述得非常详细

2.服务器需要的pem文件生成命令,以生产环境的推送证书为例。

先cd到存放.cer和.p12文件夹下。

例如我有生产环境推送的.cer与.p12长这样:

cert_production.cer

key_production.p12

  • 生成.cer文件对应的pem文件
1
openssl x509 -in cert_production.cer -inform DER -out cert_production.pem -outform PEM
  • 生成.p12文件对应的pem文件
1
openssl pkcs12 -nocerts -out key_production.pem -in key_production.p12
  • 下面2个命令是测试生成的2个pem文件是否有效
1
2
3
telnet gateway.push.apple.com 2195

openssl s_client -connect gateway.push.apple.com:2195 -cert cert_production.pem -key key_production.pem
  • 如果是开发环境的的推送证书,用这个测试
1
2
3
telnet gateway.sandbox.push.apple.com 2195

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

###参考文章
参考了百度知道苹果官方文档