关闭

证书制作,各个环节的原理以及推送证书制作,和如何为推送服务器提供证书

标签: 证书ios
607人阅读 评论(0) 收藏 举报
分类:

证书制作的流程截图网上有很多,所以就不再赘述,这篇文章只记录一些原理性的东西,因为我研究了好久才弄明白各种证书的作用和修改的时候互相的影响,所以总结下,以便后来人省点力气,也算是我的笔记。如有出错之处,请指出,多谢。对于苹果官方文档描述的,xcode中用私钥对代码进行签名,苹果用公钥验证签名有效性的流程不是很了解,大学学的那点密码学全都还回去了,如果有人了解还望指点一二。


1. 制作证书时,首先从钥匙串提交申请,生成一个certSigningRequest文件,这个文件是证书的申请文件。经过观察,这个文件产生后,钥匙串内并没有产生公钥和私钥,因此这个文件纯粹就是一个带有申请信息的文件。这个申请文件包含产生公钥和私钥的生成码之类的东西,并且包含本机的某些信息。

   为什么这么说呢,提交这个文件申请的certificate的公钥和私钥对是同一对,无论申请什么证书,带有的公钥,私钥都不会发生变化。并且生成的certificate在创建certSiginingRequest文件的本机安装,就可以导入私钥到钥匙串,在其它机器安装只能得到公钥,由此分析,request文件中的信息决定了产生的公钥和私钥,并且决定了证书所能安装的机器。 不过值得说明的一点,申请不同证书可以使用同一个certSigningRequest文件,也可以使用不同的(比如开发证书,发行证书,推送证书等),只要保证证书安装后有相应私钥在钥匙串中就可以。迁移时也是.cer文件和私钥一起迁移就可以。

产生的私钥用于对代码进行签名,如果编译时出现签名之类的报错,就找私钥相关问题。


2.制作证书第二步,是从个人账号创建开发环境或者发布环境的证书,产生的文件为.cer文件,这个文件是授权xcode进行构建工程的。这个文件是提交上一步提到的certSigningRequest文件申请得到。xcode编译时,会先检查mobileprovision文件中指定的.cer证书是否安装了,如果安装了,并且有对之进行签名的私钥,然后再进行mobileProvision文件中的其他信息进行检查。


3.添加应用,应用的关键信息就是应用的bundle ID,这个是全球唯一的,其他配置不再赘述,推送我在后面描述,此处先描述完整普通应用中涉及到的内容。


4. 添加设备,设备的作用为,开发环境的证书包含此设备,此设备才能进行调试。


5.做mobileprovision文件。这个文件是整合了2,3,4步的信息的综合文件。也就是如果2,3,4步中哪一步修改都要重新去做这个文件。否则这个证书就失效了,必须重新做。


整体来说,第二步的证书申请之后,一般在开发的过程中不会再修改,如果迁移证书到另一台机器上,拷贝第二步中产生的.cer文件,和该.cer文件对应的私钥导出的p12文件,还有第五步产生的mobileprovision文件到新的机器,然后在新的机器上分别安装这几个文件就可以了。


----------------------------------------------------------------

下面说一下推送证书的制作。推送证书在上述的第三步中进行配置,第三步中的应用可以配置额外的证书,推送就是其中之一。推送证书也分为开发和发行两种版本。推送证书也是先提交certSigningRequest文件然后生成的,这个certSigningRequest文件是否和上述第一步的文件相同不重要(相同的话,最后所用私钥也就是同一个,不影响)。生成的发行证书也是.cer文件,安装在本机即可。此处注意,此证书和上述第二步中的证书是相互独立的。也就是一个修改不影响另一个证书,不用重新制作另一个证书。

但是,有一点,因为推送证书修改了上述第三步中的应用配置,所以此处配置会影响到上述第五步产生的文件provision文件(也就是修改推送,第五步文件就要重新做)。


推送证书如果重做了之后(app过户或者证书过期都可能会需要重做),老的推送证书提交的app的推送功能不会受到影响,这个推送证书只是用于推送服务器和apns创建连接时做安全验证用的。所以这个证书是动态更新的,不用appstore提交更新才生效,推送服务器更新就生效。这点不像xcode的发型证书。

 推送服务器使用的证书会和developer网站上配的最新的推送证书做对比,只要两边一致推送就能成功。


xcode配置应用工程的时候,Code Signing Identity选项选择的是私钥,选择的选项,括号中的编码与私钥中括号中的编码相同,到时候判断配置是否正确时可以比一下。

xcode另一个配置Provision Profile配的是mobileprivision文件(第五步中描述的),这个文件必须保证是最终配的,有效地。


如果各个地方都配对了,还是报错,如果是报mobileprivision文件找不到的话,就点击xcode的prefference菜单,在弹出窗口里面找到开发账号,点击view details按钮,弹出xcode中所有签名和证书,点一下download all。如果还不行,只能重启xcode或者重启电脑了,我就遇见过证书都对,却一直报错,重启了就不报错了的情况,什么软件都会有bug嘛,包括xcode。

-----------------------------------------------------------------


生成了推送证书之后,需要把证书提供给推送服务端,由于多数服务器是windows或linux不识别cer文件,所以要把推送证书的cer文件和相应的私钥导出的p12文件转成pem文件提供给服务端,网上也有很多相关的转换方法,转完后连接苹果服务器测试一下没有问题就可以提供给服务端了

简单记一下命令吧


两个文件格式转换:

$ openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem

$ openssl pkcs12 -in key.p12 -out key.pem -nodes


//合并两个文件

$ cat  cert.pem decryptedkey.pem > apns.pem


测试证书和key是否正确,能连上苹果的apns服务器。
$ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert cert.pem -key key.pem # sandbox
$ openssl s_client -connect gateway.push.apple.com:2195 -cert cert.pem -key key.pem # production

 如果要去掉key pem文件里的密码保护,执行下面的命令行处理pem文件,得到没有密码保护的pem文件。
openssl rsa -in apns_dev_key.pem -out apns_dev_key.unencrypted.pem
openssl rsa -in apns_prod_key.pem -out apns_prod_key.unencrypted.pem
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:41259次
    • 积分:836
    • 等级:
    • 排名:千里之外
    • 原创:30篇
    • 转载:82篇
    • 译文:0篇
    • 评论:4条
    最新评论