这是一篇来自raywenderlich的教程,内容翔实!结构简单透彻、讲解循序渐进、文章质量上乘!是一篇难的的博文!使用半瓶的英语水平翻译了一下:
  
  1.【iOS push全方位解析】(一) push的概述
  
  2.【iOS push全方位解析】(二) 生成push证书,生成Provisioning Profile(本篇)
  
  3.【iOS push全方位解析】(三) 一个极简的demo,并测试一下push
  
  这里查看原文
  
  --------------------------------------------------------------------------------------------------------------------------------------------
  
  Provisioning Profile和证书,Oh My!
  
  为了App中push通知好用,App需要provisioning profile签名。另外,App Server需要用SSL证书对push通知签名。provisioning profile和SSL 证书是紧密连接在一起的,并且仅对一个App ID可用,这么做可以保证只有你的App Server可以发送push消息到你的App而不是别人的App。
  
  正如你所知,App使用不同的provisioning profile分别用于开发和发布。同样,也有两种push证书:
  
  ● Development 被开发者provisioning profile签名的app,App Server必须使用开发者证书发送通知。
  
  ● Production 按照Ad Hoc或者APP Store发布的app,App Server必须使用production证书。如果两者混淆,那么App则收不到push通知。
  
  本教程仅使用development 证书
  
  生成Certificate Signing Request(CSR)
  
  还记得你是如何为App真机联调生成Development 证书么?如果记起来了,下面的步骤会很熟悉。但,我建议你还是严格按照步骤操作。大多数做push通知开发的时候,都遇到了证书问题。
  
  数字证书是基于公-私钥的密码学。你不必知道cryptography如何使用证书:,但是你有必要了解:证书总是跟私钥一起工作的。证书只是“公-私钥”的公开部分。发给其他人是安全的,然而,私钥应该被保护好,它是一个秘密。私钥不是别人的事儿,而是你自己的事!有一点很重要:没有私钥,不能使用证书。
  
  无论什么时候,请求一个数字证书,需要提供一个Certificate Signing Request(简写CSR)。当生成CSR,一个新的私钥被放到mac的钥匙串中了。接着,你发送CSR到一个证书机构(这里就是iOS developer protal),该机构将基于你提交的CSR生成SSL证书。
  
  打开mac中的“钥匙串”,选择菜单,“Request a Certificate from a Certificate Authority”
  
  (图)请求证书1
  
  如果你没有这个菜单选项或者显示“Request a certificate from a certificate Authority with key”,你下载并安装WWDR InterMediate Certificate ,并确保在钥匙串窗口中没有选中任何一个私钥。
  
  你应该看到下图:
  
  (图)请求证书2
  
  输入email地址。我听说需要使用,用于App签名的email相同。但是,好像其他什么email都ok。
  
  输入“PushChat”作为名字,这儿可以输入任何字符,找一个好记的,方便后面我们发现私钥。选中【 Saved to disk】点击“Continue”。将文件保存为“PushChat.certSigningRequest”。在“密钥”这个栏中可以看到刚刚申请的private,右键,并选择“Exprot”
  
  (图)导出证书
  
  保存私钥为PushChatKey.p12并输入一个密码。本教程中,我使用“pushchat”作为p12文件的密码,但是你应该选一个容易记的密码。这个密钥(p12)文件需要保密。
  
  生成App ID和SSL证书
  
  登录iOS Dev Center选择右侧面板的“Certificate,Identifiers&Profile”。
  
  (图)iOS dev center
  
  下面的界面出现了
  
  (图)Certificate,Identifiers&Profile大纲
  
  既然我们搞iOS app,在iOS Apps中选择“certificates”。现在你可以生成一个新的App ID。每一个push App需要唯一的ID,因为push通知是发送给指定的app
  
  在左侧点击“App IDs”,点击“+”按钮
  
  (图)添加App id
  
  输入下面的信息:
  
  ● App ID Description:PushChat
  
  ● App Services Check the push Notification Checkbox
  
  ● Explicit App ID
  
  你最好使用自己的BundleIdentifier-com.yoursite.PushChat-而不是使用我的。你还需要在www.yyzx66.cn/ Xcode中设置相同的Bundle ID。输入这些信息后,点击“Continue”。将询问你是否确定这些信息,如果一切无误后点击“Submit”
  
  哈哈!你已经成功注册了一个新的App ID
  
  (图)App ID生成了
  
  接下来几分钟,你还会生成SSL证书,App Server www.hsl85.cn/将使用这个SSL证书跟APNS建立一个安全连接。这个证书跟App ID相连。APP Server只能发送push通知给这个App ID的程序,而不是其他App。
  
  生成App ID后,它看在列表中这个位置:
  
  (图)App id的展示
  
  在列表中点击这个PushChat App id,一个相关的窗口出现了:
  
  (图)App id详情
  
  注意在“Push Notification”这一行,两个橙色的原点,“Configurable”分别在Develop和Distribution栏。这表示你的App ID可以用于push,但是你还需要设置一下。点击“setting”按钮,配置一下:
  
  (图)App id config
  
  向下滚动到“Push Notification”这一段,选择Develop SSLwww.senta7.net Certificate这一行的“Create Certificate”按钮。
  
  (图)生成证书
  
  “Add iOS Certificate”向导出现了:
  
  (图)向导
  
  第一件事,询问你生成Certificate signing Request,这一步你已经做完了,点击“continue”。下一步,你该上传CSR文件。选择刚才生成的CSR,点击“Generate”。
  
  生成SSL 证书这将花费几秒钟,当它进行完成,点击“Continue”。
  
  现在点击“Download”来获取证书,它自动被命名为“aps_www.huacairen88.cn development.cer”
  
  (图)下载证书
  
  正如你看到的,你已经有一个可用的证书,现在开发可以用push了。如果有需要,你还可以下载这个证书。开发者push证书三个月有效。
  
  当你发布app,重复上面的操作。获取一个production 证书。步骤是相似的。production证书的有效期是一年,你需要确保在期限前。
  
  没必要添加这个certificate到钥匙串,当然你可以双击aps_development.cer文件,你会发现它跟私钥关联起来了。
  
  制造PEM文件
  
  到目前位置,你有三个文件:
  
  ● CSR文件
  
  ● PushChatKey.p12私钥文件
  
  ● SSL证书(aps_development.cer)
  
  将这三个文件保存好。你可以把CSR扔了,但是我觉得存着更容易一些。当证书过期,你可以使用那个CSR来生成一个新的证书。如果你生成一个新的CSR,还要导出一个新的私钥(p12)(安装证书后,在钥匙串中邮件导出为p12)。通过复用CSR你可以使用已有的私钥,仅.cer文件会变化。
  
  你得将证书和私钥转成更容易使用的格式。因为,我们的app Server是用PHP写的,所以你需要将证书和私钥合成为PEM格式。PEM格式对PHP来说更容易使用。如果你的app Server使用其他语言写的,下面这些步骤不使用了。
  
  你将使用OpenSSL命令行来操作。打开命令行执行下面的步骤,进入证书的下载文件夹,我的是桌面:
  
  $ cd ~/Desktop/
  
  转换cer为pem文件
  
  $ openssl x509 -in aps_development.cer -in www.yghrcp88.cn form der -out PushChatCert.pem
  
  转换p12为pem文件
  
  $ openssl pkcs12 -nocerts -out PushChatKey.pem -in PushChatKey.p12
  
  Enter Import Password:
  
  MAC verified OK
  
  Enter PEM pass phrase:
  
  Verifying - Enter PEM pass phrase:
  
  你第一次需要输入p12的密码,这样opensll可以读取它。接着你还为PEM需要输入一个新的密码。这儿我还使用“pushchat”,你可以使用更安全的密码。
  
  注意:如果你没有输入PEM密码,openssl不会提示错误信息,但是生成的pem文件并没有私钥。
  
  最后,合成证书和key为一个pem文件
  
  $ cat PushChatCert.pem PushChatKey.pem > ck.pem
  
  至此,检查一下证书是否正常。执行下面的命令:
  
  $ telnet gateway.sandbox.push.apple.com 2195
  
  Trying 17.172.232.226...
  
  Connected to gateway.sandbox.push-apple.com.akadns.net.
  
  Escape character is '^]'.
  
  上面是一个普通,没有加密的连接到APNS Server。看到以上的信息,说明你的mac可以连接到APNS。Ctrl + C关闭连接。如果得到错误消息,确保防火墙对2195是放开的。
  
  我们再连接一次,这次使用SSL证书和私钥建立安全连接
  
  $ openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
  
  Enter pass phrase for PushChatKey.pem
  
  你应该看到一大堆输出,这些是openssl想让你知道后面在干什么。如果连接成功,你可以键入一些字符。输入回车,服务器关闭了连接。如果建立连接的时候有问题,openssl会给出错误信息,但是你得向上滚动查找到并查看。
  
  【注意】:有两个APNS服务器:沙盒服务器用于测试,线上live用于生产模式。这里,我们使用沙盒服务器,因为我们的证书是development的,不是distribution的
  
  -----------------------------------------------------------------------------------------------------------------------------
  
  译者加:
  
  生成openssl证书和ck.pem的过程可以归纳为:
  
  -----------------------------------------------------------------------------------------------------------------------------
  
  制造provisioning profile
  
  在iOS Dev Center 还没有,点击左侧栏的Provisioning profiles按钮,点击“+”按钮。
  
  (+provisioning file)
  
  Step1:选择类型
  
  选择“iOS App development”选项按钮,点击continue
  
  (provision develop)
  
  Step2:配置
  
  选择PushChat app ID,可以保证provisioning profile准确的绑定了PushChat App
  
  (选择app id)
  
  Step3:生成
  
  选择要包含的证书,这一步现在应该很常规。
  
  (选择证书)
  
  Step4:选择devices
  
  选择你想包含的设备,
  
  Step5:profile的名字
  
  设置provisioning profile的名字为“PushChat Development”
  
  (provisioning name)
  
  你几乎已经完成了,最后,点击“Download”按钮,下载最新生成的provisioning profile。
  
  双击provisioning profile添加到Xcode或者拖拽到xcode中。
  
  如果你是发布App,可重复相似的过程。生成一个Ad Hoc或者App Store发布的profile。

iOS push全方位解析(二)【译文】"——生成OpenSSL证书,Provisioning Profile的更多相关文章

  1. [转载]iOS Provisioning Profile(Certificate)与Code Signing详解

    原文:http://blog.csdn.net/phunxm/article/details/42685597 引言 关于开发证书配置(Certificates & Identifiers & ...

  2. iOS Provisioning Profile(Certificate)与Code Signing详解

    引言 关于开发证书配置(Certificates & Identifiers & Provisioning Profiles),相信做 iOS 开发的同学没少被折腾.对于一个 iOS ...

  3. 【转】iOS Provisioning Profile(Certificate)与Code Signing详解 -- 待看

    原文网址:http://blog.sina.com.cn/s/blog_82c8198f0102vy4j.html 引言 关于开发证书配置(Certificates & Identifiers ...

  4. 【转】 iOS Provisioning Profile(Certificate)与Code Signing详解

    原文:http://blog.csdn.net/phunxm/article/details/42685597 引言 关于开发证书配置(Certificates & Identifiers & ...

  5. Java生成与解析二维码

    1.下载支持二维码的jar包qrcode.jar和qrcode_swetake.jar, 其中qrcode_swetake.jar用于生成二维码,rcode.jar用于解析二维码,jar包下载地址(免 ...

  6. java 生成和解析二维码

    public class QRCode { /** * 解析二维码(QRCode) * @param imgPath * @return */ public static String decoder ...

  7. asp.net C#生成和解析二维码代码

    类库文件我们在文件最后面下载 [ThoughtWorks.QRCode.dll 就是类库] 使用时需要增加: using ThoughtWorks.QRCode.Codec;using Thought ...

  8. java二维码之利用谷歌的zxing生成二维码,解析二维码

    生成二维码 @RequestMapping("/123") public void test(HttpServletRequest request,HttpServletRespo ...

  9. ZXing 生成、解析二维码图片的小示例

    概述 ZXing 是一个开源 Java 类库用于解析多种格式的 1D/2D 条形码.目标是能够对QR编码.Data Matrix.UPC的1D条形码进行解码. 其提供了多种平台下的客户端包括:J2ME ...

随机推荐

  1. dd usb 启动盘制作 成功版本

    在linux系统中,使用dd命令制作启动盘成功.方法是在终端中输入命令:     dd if=/root/opensuse.iso of=/dev/sdb bs=4M     说明:      1.o ...

  2. SUSE Linux实现局域网时间同步

    0.前言     需求是这么来的,搭建了Storm集群进行协同过滤算法的计算性能测试,要求精度在毫秒(ms)级别.局域网内40个虚拟机节点,用 date 命令,精度上和效率上都不可行.所以,就搭建了 ...

  3. jquery 书写全选反选功能

    书写一个后台管理中用到的全选反选功能.代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. 动态的变量如何作为json的键

    定义一个json,然后设置键值,可是键本身也是变量 如何写呢? 按照以往的写法 var name="lizhaoyao"; var json={}; json.name=" ...

  5. PHP面试题三

    1.nginx使用哪种网络协议? nginx是应用层 我觉得从下往上的话 传输层用的是tcp/ip 应用层用的是http fastcgi负责调度进程 2. <? echo 'hello tush ...

  6. 【JAVA - SSM】之MyBatis与原生JDBC、Hibernate访问数据库的比较

    首先来看一下原生JDBC访问数据库的代码: public static void main(String[] args) { // 数据库连接 Connection connection = null ...

  7. linux系统下安装apache与tomcat

    apache的安装 把安装包放到/soft 下 [root@localhost ~]#cd /soft [root@localhost soft]#tar jxvf httpd-2.2.25.tar. ...

  8. Android.mk 的含义

    LOCAL_PATH:=$(call my-dir) LOCAL_PATH是定义源文件在哪个目录用的. my-dir 是个定义的宏方法, $(call my-dir)就是调用这个叫 my-dir的宏方 ...

  9. [转]将某个Qt4项目升级到Qt5遇到的问题

    原文:http://hi.baidu.com/xchinux/item/9044d8ce986accbb0d0a7b87晚上花了4个小时,将以前的一个项目从Qt 4.8.4-MinGW升级到了Qt5. ...

  10. LeetCode——Remove Element

    Given an array and a value, remove all instances of that value in place and return the new length. T ...