制作推送證書的流程:
1. 首先我們要有生成一個Certificate Signing Request(也就是CSR)的請求文件。(在應用程序里的使用工具中找到鑰匙串訪問)柑潦。
2. 登錄開發(fā)者賬號:
? (1)如果沒有為app創(chuàng)建APP ID的話需要先為APP創(chuàng)建APP ID
? ???????? 首先到accounts第二欄:點擊APP IDs ,點擊加號峻凫,按照提示操作
? (2)如果有的話直接進入第三步渗鬼;
3. 創(chuàng)建發(fā)布證書;點擊Certificates荧琼,development 點擊加號 (此處省略一萬字譬胎。。铭腕。)制作并下載银择,點擊done完成多糠;
4. 創(chuàng)建配置文件(Provisioning files) 按照提示操作 制作并下載 點擊done完成
5. 雙擊第三步下載的發(fā)布證書進行安裝累舷,然后打開鑰匙串,找到對應的證書夹孔,右鍵選擇導出被盈,制作P12證書。
6. 到現在為止我們已經獲取到了三個文件搭伤,將他們一起放在一個文件夾下只怎;
7. 打開terminal(終端),(位置:應用程序à實用工具à終端)怜俐,
鍵盤輸入cd到切換到桌面身堡,我們那三個文件所在的位置,使用openssl 命令編譯
注釋:在講解之前先說一下cd切換的目的:切換根目錄是要讀取前面創(chuàng)建的三個文件拍鲤,如果大家不是在桌面放置的話需要將根目錄cd到你放置這三個文件的位置贴谎,如果不知道當前目錄中都有那些文件夾,可以使用命令ls進行查看
? (1)把.cer的SSL證書轉換為.pem文件季稳,執(zhí)行命令:
? ? ? ? ? openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
? ????????openssl x509 -in aps.cer -inform der -out PushChatCert.pem
? (2)把私鑰Push.p12文件轉化為.pem文件擅这,命令如下:
????????????openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12
????????????openssl pkcs12 -nocerts -out PushChatKey.pem -in disPush.p12
? (3)如果服務端是java寫的,那么用下面的命令生成P12文件景鼠。
? ???????? 用certificate和the key創(chuàng)建PKCS#12格式的文件仲翎。
(A)openssl pkcs12 -export -in PushChatCert.pem -inkey PushChatKey.pem -certfile CertificateSigningRequest.certSigningRequest -name "push" -out testPush.p12
或:openssl pkcs12 -export -in PushChatCert.pem -inkey PushChatKey.pem -name "push" -out testPush.p12
注意: 如果報錯”unable to load certificates”,把第三條命令的-certfile CertificateSigningRequest.certSigningRequest 去掉就好
(B)如果服務端是PHP寫的,那么用下面的命令生成CK文件:命令行如下:
? ? ? cat PushChatCert.pem PushChatKey.pem > ck.pem
到此為止铛漓,推送需要的文件就全部制作完成了溯香。
為了測試證書是否工作,執(zhí)行下面的命令:
telnet gateway.sandbox.push.apple.com 2195
它將嘗試發(fā)送一個規(guī)則的浓恶,不加密的連接到APNS服務逐哈。如果你看到上面的反饋,那說明你的MAC能夠到達APNS问顷。按下Ctrl+C關閉連接昂秃。如果得到一個錯誤信息禀梳,那么你需要確保你的防火墻允許2195端口。一般這里都不會出現什么問題肠骆。
下面我們要使用我們生成的SSL證書和私鑰來設置一個安全的鏈接去鏈接蘋果服務器:
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
執(zhí)行完這一句命令后需要我們輸入密語:
Enter pass phrase for PushChatKey.pem:這個密碼是你在生成PushChatKey.pem文件時設置的密碼算途,我們輸入密碼按回車
你會看到一個完整的輸出,讓你明白OpenSSL在后臺做什么蚀腿。如果鏈接是成功的嘴瓤,你可以隨便輸入一個字符,按下回車莉钙,服務器就會斷開鏈接廓脆,如果建立連接時有問題,OpenSSL會給你返回一個錯誤信息磁玉。
?當你在最后的時候你看到這樣說明你已經成功了:
CONNECTED(00000003)
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa isincorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust CertificationAuthority - L1C
verify error:num=20:unable to get local issuercertificate
verify return:0
---
Certificate chain
?0s:/C=US/ST=California/L=Cupertino/O=Apple Inc./OU=iTMSEngineering/CN=gateway.sandbox.push.apple.com
? i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated byreference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
?1s:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated byreference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
?? i:/O=Entrust.net/OU=www.entrust.net/CPS_2048incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.netCertification Authority (2048)
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIFGzCCBAOgAwIBAgIETBz90jANBgkqhkiG9w0BAQUFADCBsTELMAkGA1UEBhMC
……省略……
fMGbLqkGn8YogdPqe5T1
-----END CERTIFICATE-----
subject=/C=US/ST=California/L=Cupertino/O=AppleInc./OU=iTMS Engineering/CN=gateway.sandbox.push.apple.com
issuer=/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa isincorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust CertificationAuthority - L1C
---
No client certificate CA names sent
---
SSL handshake has read 2731 bytes and written 2165 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:C7A47EED5E1F5……省略……369D4
??? Key-Arg?? : None
??? Start Time:1361862882
??? Timeout?? : 300 (sec)
??? Verify return code: 0 (ok)
---
3停忿、APNS地址
測試地址gateway.sandbox.push.apple.com:2195
發(fā)布地址 gateway.push.apple.com:2195
測試的地址用的是沙盒,發(fā)布地址是不同的蚊伞。發(fā)布軟件的時候記得改過來
4席赂、要注意順序問題,一定要按照這個順序來: