轉載 http://hi.baidu.com/xuhonghui126/blog/item/a32c8dceb99a5e0493457e5b.html
配置步驟:
注意:
(What is your fist and last name?」,請輸入您要申請SSL證書的域名,而不是真的輸入您的個人姓名,如果您需要為www.domain.com申請SSL證書就不能只輸入 domain.com。SSL證書是嚴格綁定域名的。)
1.安裝檢查openssl環境
安裝openssl的方法見http://blog.csdn.net/sunyujia/archive/2008/10/03/3014667.aspx
安裝完成後將openssl\bin添加到環境變量path中,該目錄下正常有4個文件
openssl.exe,ssleay32.dll,libeay32.dll,openssl.cnf
注意:cnf擴展名會被操作系統當成快捷方式,看不到擴展名,在dos下使用dir就可以看到。
進入cmd後輸入openssl可能會提示
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
提示找不到openssl.cnf ,沒有關係在輸入openssl命令前添加環境變量OPENSSL_CONF即可。
set OPENSSL_CONF=openssl.cnf
本教程使用openssl.cnf默認配置即可無需修改。
2.在openssl安裝目錄(bin目錄的上一級目錄,有openssl.cnf文件的目錄即可)新建如下批處理腳本
在貼腳本前我先說明下腳本實現主要功能:
建立CA證書
簽發Server端證書
簽發Client端證書
用keytool生成tomcat使用的jks文件
此批處理文件較長,我已檢查多次如果錯誤請讀者指正,謝謝!
@echo off
echo.
echo.
echo 單向SSL驗證 TOMCAT_HOME\conf\server.xml文件配置示例
echo.
echo My Blog:ht^tp://blog.csdn.net/sunyujia/
echo.
set OPENSSL_CONF=openssl.cnf
echo.
echo 製作根證書
echo 1.創建根證私鑰
if not exist root-key.key (
echo 創建一個不加密的PEM格式的私鑰root-key.key
rem genrsa 用於生成一個 RSA 私鑰
rem 1024是私鑰的長度,默認是 512 ,最大是 1024
openssl genrsa -out root-key.key 1024
) else (
echo 私鑰root-key.key已經存在
)
echo 2.創建根證書請求文件
if not exist root-req.csr (
echo 使用root-key.key私鑰 創建一個根證書請求文件root-req.csr
rem -new 產生一個新的CSR, 它會要用戶輸入創建CSR的一些必須的信息.
rem 至於需要哪些信息,是在config文件裡面定義好了的.
rem -key 指明我們的私有密鑰文件名.允許該文件的格式是PKCS#8.
rem 如果-key沒有被set, 那麼就將根據config文件裡的信息先產生一對新的RSA密鑰
rem -keyform 指定輸入的私有密鑰文件的格式是DEM還是DER.DER格式採用ASN1的DER標準格式。
rem PEM格式就是base64編碼格式.
openssl req -new -out root-req.csr -key root-key.key -keyform PEM
) else (
echo 根證書請求文件root-req.csr已經存在
)
echo 3.自簽根證書
if not exist root-cert.cer (
echo 使用root-req.csr證書和root-key.key私鑰簽發x509格式的自簽根證書root-cert.cer
rem -in 要處理的CSR的文件名稱,只有-new和-newkey倆個option沒有被set,本option才有效
rem -signkey 簽名私鑰
rem -days證書的有效日期
openssl x509 -req -in root-req.csr -out root-cert.cer -signkey root-key.key -CAcreateserial -days 3650
) else (
echo 自簽根證書root-cert.cer已經存在
)
echo 4.導出p12格式根證書
if not exist root.p12 (
openssl pkcs12 -export -clcerts -in root-cert.cer -inkey root-key.key -out root.p12
) else (
echo p12格式根證書root-cert.cer已經存在
)
echo 生成root.jks文件
set password=
echo 輸入jks的密碼,密碼至少必須為6個字符:
set /p password=
echo 密碼是 %password% 稍後提示 信任這個認證?輸入 y 即可
echo.
if exist root.jks (
del root.jks
)
keytool -import -v -trustcacerts -storepass %password% -alias root -file root-cert.cer -keystore root.jks
echo 已生成root.jks文件
echo.
echo 製作服務端證書
call :sub server
echo.
echo 製作客戶端證書
call :sub client
goto :end
:sub
echo 1.創建私鑰
if not exist %1-key.key (
openssl genrsa -out %1-key.key 1024
) else (
echo 私鑰%1-key.key已經存在
)
echo 2.創建證書請求文件
if not exist %1-req.csr (
openssl req -new -out %1-req.csr -key %1-key.key
) else (
echo 證書請求文件%1-req.csr已經存在
)
echo 3.自簽證書
if not exist %1-cert.cer (
openssl x509 -req -in %1-req.csr -out %1-cert.cer -signkey
%1-key.key -CA root-cert.cer -CAkey root-key.key -CAcreateserial -days
3650
) else (
echo 自簽證書%1-cert.cer已經存在
)
echo 4.導出p12格式證書
if not exist %1.p12 (
openssl pkcs12 -export -clcerts -in %1-cert.cer -inkey %1-key.key -out %1.p12
) else (
echo 自簽證書%1.p12已經存在
)
goto :eof
:end
echo.
echo 整理歸檔生成的證書文件
if not exist root (
md root
)
move root.p12 root/root.p12
move root-cert.cer root/root-cert.cer
move root-key.key root/root-key.key
move root-req.csr root/root-req.csr
move root-cert.srl root/root-cert.srl
move root.jks root/root.jks
if not exist server (
md server
)
move server.p12 server/server.p12
move server-cert.cer server/server-cert.cer
move server-key.key server/server-key.key
move server-req.csr server/server-req.csr
if not exist client (
md client
)
move client.p12 client/client.p12
move client-cert.cer client/client-cert.cer
move client-key.key client/client-key.key
move client-req.csr client/client-req.csr
if not exist 證書 (
md 證書
)
move root 證書/root
move client 證書/client
move server 證書/server
echo 整理完畢
pause
最終生成一個證書目錄
我們所需的文件列表
證書\root\root.jks
證書\root\root.p12 可選
證書\server\server.p12
證書\client\client.p12
3.配置tomcat的conf\server.xml文件
將root.jks和server.p12 複製到tomcat目錄下,文件可以不放置在這裡如下配置支持絕對路徑和相對路徑。
在conf\server.xml中加入如下配置
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
acceptCount="100"
keystoreFile="server.p12"
keystorePass="密碼"
keystoreType="PKCS12"
truststoreFile="root.jks"
truststorePass="密碼"
truststoreType="JKS"
/>
4.簡單驗證
登錄https://127.0.0.1/會提示請求的網站要求證書,將client.p12導入到瀏覽器中即可
位置在internet選項-內容-證書
client.p12導入到個人證書選項卡里面
root.p12導入到受信任的根證書頒發機構裡面
Openssl 生成公私鑰文件
生成私鑰:
openssl genrsa -out private.key 1024生成公鑰:
openssl rsa -in private.key -pubout -out pub.key
留言列表