导出pem证书给服务端Push Notification使用

本文详细介绍了在iOS应用中配置推送通知所需的证书生成过程。包括创建CSR文件、设置AppID及Provisioning Profile、下载并安装Push Notification证书、导出p12文件以及将其转换为服务端所需的pem格式。

地址:http://blog.youkuaiyun.com/cooldragon/article/details/19404645

制作pem证书的另一种方式:
1、 钥匙串创建Push证书的证书签名请求文件(CSR文件)。

如下图所示:


 

2、创建App ID,创建Provisioning Profile,下载安装到XCode。

 

苹果开发者后台页面,创建Push Notification App需要的App Id:


注意要勾选需要的服务:

 

接下来,就是到Provisioning Profiles创建新的描述文件,并选取刚才新创建的AppID,然后下载下来,双击安装到XCode里。

 

在您的App源码工程里修改Bundle Identifier为您新创建的那个AppID,再在Build Settings里代码签名的地方Provisioning Profiles选择选择刚才下载的那个。

 

3、接下来从苹果开发者后台下载这个程序需要的Push Notification证书,并安装到钥匙串。

回到页面“App Ids”列表,点击刚才的新创建的AppID,点击“Edit”按钮:


进来后,滚动页面到下面,看到Push Notifications,如下:


点击“Create Certificate”按钮,如果只是开发调试,使用上面那个按钮即可,点击后,如下:


点击“Continue”按钮后如下图,注意选择文件选择的就是上面步骤1产生的“CertificateSigningRequest.certSigningRequest”文件:


点击“Generate”按钮后,如下:


下载“Download”按钮下载证书到本地:


双击aps_development.cer证书将自动安装到钥匙串,如下:

 

 

4、在钥匙串里导出p12文件。

(1)先导出Push Services的证书,比如我们命名为“magic_cert.p12”,注意导出时会让你输入密码。


(2)再导出Push Services证书的密钥(Private Key),比如我们命名为“magic_key.p12”:


 

5、p12文件转换为pem文件。

(1)  将两个p12文件分别转换为pem格式文件。

打开“终端”,敲入命令即可转换。

第一个:

openssl pkcs12 -clcerts -nokeys -out magic_cert.pem -in magic_cert.p12

第二个:

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

注意会让你输入前面你在钥匙串导出证书时的导出密码。

 

注:如果最终的pem在服务端系统使用时不需要密码,则可以执行命令去除密码:

openssl rsa -in magic_key.pem -outmagic_key_nopwd.pem

 

最后会生成两个pem文件,如:“magic_cert.pem”、“magic_key.pem或者magic_key_nopwd.pem”。

 

(2)  将两个pem文件合并成服务端系统需要的一个pem文件。

依然是命令行执行即可:

cat magic_cert.pem magic_key.pem >magic-dev.pem

 

或者不需要密码的:

cat magic_cert.pem magic_key_nopwd.pem >magic-dev.pem

 

最终会生成一个供服务端系统使用的“magic-dev.pem”。

 

6、OK,打完收工,可以各种吐槽了。


<think>好的,我现在需要解决用户的问题:如何使用keytool导出PEM格式的SSL/TLS证书。首先,我需要回忆一下keytool的常用命令和相关参数。 用户提到他们已经看过一些引用内容,其中引用[3]展示了一个导入证书的例子,但用户现在需要的是导出PEM格式。通常,keytool默认导出的是DER或PKCS#7格式,而PEM是Base64编码的文本格式,所以需要转换步骤。 首先,我应该考虑使用keytool导出证书为DER格式,因为这是二进制格式,然后通过OpenSSL将其转换为PEM。这可能涉及到以下步骤: 1. 使用keytool的-exportcert命令导出为DER格式(.cer或.crt文件)。 2. 使用OpenSSL的x509命令将DER转换为PEM格式。 此外,用户可能需要知道如何指定别名和密钥库路径。例如,基本的导出命令可能像这样: keytool -exportcert -alias 别名 -keystore 密钥库.jks -file 证书.der -rfc 不过,这里有个疑问:-rfc参数是否可以直接导出PEM?根据记忆,-rfc参数确实可以指定输出为PEM格式,因为默认情况下keytool导出的是DER格式,但加上-rfc后会用Base64编码,符合PEM的要求。所以可能不需要额外使用OpenSSL转换,直接使用-rfc参数即可得到PEM文件。 接下来需要验证这一点。查阅资料确认,keytool的-exportcert命令配合-rfc选项确实可以输出PEM格式。例如: keytool -exportcert -alias myalias -keystore keystore.jks -rfc -file certificate.pem 这样用户就可以直接得到PEM文件,无需转换步骤。不过,如果用户的环境中没有安装OpenSSL,或者需要确保兼容性,可能需要分两步进行,先导出DER再转换。 另外,需要提醒用户替换示例中的别名、密钥库名称和密码。可能还需要注意密钥库的类型,比如JKS或PKCS12,但keytool默认处理JKS,如果使用其他格式需要指定-storetype参数。 总结步骤: 1. 使用keytool导出PEM格式: keytool -exportcert -alias 别名 -keystore 密钥库.jks -rfc -file 证书.pem -storepass 密码 或者,如果使用DER再转换: 2. 导出DER: keytool -exportcert -alias 别名 -keystore 密钥库.jks -file 证书.der -storepass 密码 3. 使用OpenSSL转换: openssl x509 -inform der -in 证书.der -out 证书.pem 还需要注意权限问题,确保用户有读取密钥库的权限,以及正确的存储路径。此外,如果有多个证书链,可能需要导出完整的证书链,可能需要额外的参数,如-rfc和-chain的组合,但需要确认keytool是否支持。 可能的问题点:用户是否安装了OpenSSL?如果用户的环境无法安装OpenSSL,第一种方法(直接使用-rfc)更合适。因此,在回答中应该优先推荐使用-rfc参数直接导出,并提供备用方案。 最后,要确保命令中的参数正确,比如-storepass可能需要放在命令中,但出于安全考虑,建议用户在不带-storepass的情况下执行,让工具提示输入密码,避免密码泄露在历史记录中。 综上,正确的步骤应该是使用keytool的-exportcert命令加上-rfc选项直接生成PEM文件,或者通过导出DER再转换。需要明确两种方法,并根据用户的环境推荐最合适的方式。</think>### 如何用 keytool 导出 PEM 格式的 SSL/TLS 证书? #### 步骤说明 1. **导出证书PEM 格式** 使用 `keytool` 的 `-exportcert` 命令结合 `-rfc` 参数,直接生成 PEM 格式的证书文件: ```bash keytool -exportcert -alias [证书别名] -keystore [密钥库路径.jks] -rfc -file [导出文件.pem] -storepass [密钥库密码] ``` - `-alias`:证书在密钥库中的别名(必填) - `-keystore`:密钥库文件路径(如 `tomcat.jks`) - `-rfc`:指定输出为 PEM 格式(默认是 DER) - `-file`:导出PEM 文件路径(如 `certificate.pem`) - `-storepass`:密钥库密码(可选,建议交互式输入以保安全) **示例**: ```bash keytool -exportcert -alias tomcat -keystore /path/to/keystore.jks -rfc -file server-cert.pem ``` 执行后会提示输入密钥库密码(若未通过 `-storepass` 指定)[^3]。 2. **备用方法:DER 转 PEM** 如果环境不支持 `-rfc` 参数(旧版本工具),可先导出 DER 格式,再用 OpenSSL 转换: ```bash # 导出 DER 格式 keytool -exportcert -alias tomcat -keystore keystore.jks -file cert.der # 转换为 PEM openssl x509 -inform der -in cert.der -out cert.pem ``` #### 注意事项 - **别名查询**:若不确定证书别名,可通过以下命令列出密钥库内容: ```bash keytool -list -v -keystore keystore.jks ``` - **证书链完整性**:若证书包含中间 CA,需确保导出完整链。部分场景可能需要额外参数或手动合并文件。 - **安全性**:避免在命令行中直接写密码(如 `-storepass 123456`),建议交互式输入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值