轉換java keytools的keystore證書到OPENSSL的PEM格式文件


背景:原先業務使用的前端為haproxy,直接端口轉發至tomcat,后端進行ssl連接,所以當時生成的步驟如下

?
1
2
•生成密鑰對:keytool -genkey - alias tomcat-server -keyalg RSA -keypass xxxxxxx -storepass xxxxxxx -keystore server.keystore
•將服務器證書導出為證書文件:keytool - export - alias tomcat-server -storepass xxxxxxx - file server.cer -keystore server.keystore

而現在為了解決haproxy的單點,決定遷移前端到nginx,ssl也放在前端做。但是keytool生成的正式都是二進制 data,nginx使用的是OPENSSL標准的PEM+key文件,即ascii文本格式的密鑰。因為其他調用業務的關系,不能輕易重新生成證書。所 以就開始了艱辛的格式轉換。
首先cer文件到PEM文件的轉換較簡單。這兩者都是X509證書,編碼不同,使用openssl工具即可:

?
1
openssl x509 -inform der - in server.cer -out server.pem

至於keystore轉換就比較麻煩,搜索了一圈也沒找到直接轉換方式,只有進行兩次轉換。
首先使用http://download.csdn.net/detail/cwxzz/1072684這里的工具,PFX格式證書和JAVA keyStore證書相互轉換,先將keystore轉換為PFX證書。
修改java代碼,填入keystore路徑,生成文件的路徑,KEYSTORE_PASSWORD。javac編譯,java運行,如無錯誤,PFX格式的證書已經成功生成了。接下來使用openssl從PFX中提取私鑰。

?
1
openssl pkcs12 - in server.pfx -nocerts -nodes -out server.key

這里也需要輸入生成證書時使用的密碼。
這樣ascii格式的key文件也可以使用了。

nginx配置如下:

?
1
2
3
4
5
6
server {
     listen 443;
     ssl on;
     ssl_certificate      /usr/local/nginx/conf/cacerts/server .pem;
     ssl_certificate_key  /usr/local/nginx/conf/cacerts/server .key;
     xxxxxx...

使用瀏覽器訪問,大功告成。

一些有用的相關資料:
使用openssl進行證書格式轉換http://blog.csdn.net/linda1000/article/details/8676330
不同格式證書導入keystore方法http://www.blogjava.net/lihao336/archive/2012/02/03/369303.html
Nginx下配置SSL安全協議http://down.chinaz.com/server/201105/462_1.htm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM