RSA非對稱加密,使用OpenSSL生成證書,iOS加密,java解密

最近換了一份工做,工做了大概一個多月了吧。差很少得有兩個月沒有更新博客了吧。在新公司本身寫了一個iOS的比較通用的能夠架構一箇中型應用的不算是框架的一個結構,並已經投入使用。哈哈html

說說文章標題的相關的內容吧java

不少對安全要求比較高的應用都要使用加密,加密後與後端溝通數據,這樣能防止被別人截獲數據包,直接把接口的參數數據暴露。我上一家公司是作P2P互聯網金融的,就使用了多種加密方式,有對稱的也有非對稱的。最近新公司的APP也有意向使用加密,思考了一下,最成熟的解決方案就是使用RSA非對稱的加密了。就不介紹非對稱加密是怎麼回事了,不瞭解的自行Google或者bing。生成公鑰私鑰證書我使用的是OpenSSL的解決方案,沒錯,就是老羅捐了幾回款,爆出過心臟滴血漏洞的OpenSSL。git

先說說證書的生成吧,我使用的是MAC,上面自帶了OpenSSL,固然我刪除了,又用HomeBrew安裝了一個較新的版本。又看了下Linux上也自帶了openssl,windows上沒有,能夠去官網下載安裝github

1.終端輸入openssl,進入openssl狀態windows

2.生成一個1024位的私鑰:genrsa -out rsa_private_key.pem 1024後端

3.利用私鑰生成JAVA支持的PKCS8類型的私鑰:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out pkcs8_private_key.pem安全

4.生成JAVA支持的PKCS8二進制類型的私鑰:pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform DER -nocrypt -out pkcs8_private_key.der架構

5.生成公鑰:rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pemapp

6.生成iOS支持的der證書,其間用到了證書請求和自簽署根證書框架

  6.1.建立證書請求:req -new -out cert.csr -key rsa_private_key.pem  (其間會要求填寫國家地區公司信息等,隨便填寫OR認真填寫都不影響證書使用)

  6.2.建立X509的自簽署跟證書(iOS支持X509,有效期3650天):x509 -req -in cert.csr -out rsa_public_key.der -outform der -signkey rsa_private_key.pem -days 3650

完成了以上的步驟後應該在你所在的目錄下生成了6個文件,其中pem的文件都是文本類型的,均可以使用文本編輯器或者cat命令查看。der的都是二進制的文件了,看不了。

 

以上的都完了,推薦打開github的連接,一個不認識的人寫的,裏面包含了java端和iOS的實現方式。https://github.com/BabyDuncan/RSA_OC_JAVA

可是有兩點是須要注意的:

1.java那個使用公鑰的部分,應該使用上述的第4步生成的 pkcs8_private_key.der 文件,不要眼花啊

2.OC中在bundle中找不到der類型的文件,須要改一下上述6.2生成的 rsa_public_key.der 文件的後綴爲 .cer 才能夠。

 

完成上述的操做後就能夠正常的使用了。

插播一句:若是在java中想使用 pkcs8_private_key.pem 文件的話,請自行把那段代碼,沒錯就是那段代碼(至於究竟是哪段,本身找)替換成下面的這段

 

1            byte[] privateKeyData = Files.readAllBytes(
2                     Paths.get("/Users/ald1/Documents/workspace/aaa/src/pkcs8_private_key.pem"));
3             byte[] decodedKeyData = Base64.decodeBase64(new String(privateKeyData)
4                       .replaceAll("-----\\w+ PRIVATE KEY-----", "")
5                       .replace("\n", ""));
6                   KeyFactory keyFactory = KeyFactory.getInstance("RSA");
7             EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(decodedKeyData);

 

固然,文件的路徑自行腦補。

 

再附送幾個調研這次成果的連接,可能相關性不是很大,看下就好

OpenSSL的官網幫助:http://openssl.org/docs/manmaster/apps/rsa.html

iOS的獲取公鑰私鑰:http://codego.net/455876/

 

 

 

證書轉換:https://www.sslshopper.com/ssl-converter.html

隨意看看會有幫助的文章:http://blog.csdn.net/as3luyuan123/article/details/16105435

            http://witcheryne.iteye.com/blog/2171850

 

            http://blog.chinaunix.net/uid-26729093-id-4449165.html

好了就到這吧。

相關文章
相關標籤/搜索