背景:原先業務使用的前端為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
