1、基於Tomcat、JDK內置密鑰工具:nginx
一、生成服務端證書庫(keystore證書庫文件),用於客戶端驗證服務端的真實性 shell
keytool -genkey -v -alias key_server -keyalg RSA -keystore e:\server.keystore -dname "CN=D-F005227,OU=youku,O=zhibohudong,L=beijing,ST=beijing,C=cn" -storepass Aa123 -keypass Aa123 -validity 36000
頒發者信息:瀏覽器
CN : 通常指本站點域名或站長姓名(common name)安全
OU : 組織單位名稱(organization unit)服務器
O : 組織名稱(organization)工具
L : 城市或區域(location)加密
ST : 州或省份(state)spa
C : 兩字母國家代碼(country)code
二、生成客戶端證書(PKCS12文件),用於雙向認證中服務端驗證客戶端請求來源是否合法用戶 server
keytool -genkey -v -alias key_client -keyalg RSA -storetype PKCS12 -keystore e:\client.p12 -dname "CN=D-F005227,OU=youku,O=zhibohudong,L=beijing,ST=beijing,C=cn" -storepass Bb123 -keypass Bb123 -validity 36000
三、讓服務端信任客戶端證書,將客戶端證書導出爲CER文件
keytool -export -alias key_client -keystore e:\client.p12 -storetype PKCS12 -storepass Bb123 -rfc -file e:\client.cer
四、將step 3中導出的客戶端證書(CER文件)導入到step 1中的服務端證書庫中,以完成信任綁定
keytool -import -v -file e:\client.cer -keystore e:\server.keystore -storepass Aa123
五、Tomcat服務器配置,支持https安全鏈接(SSL雙向驗證,clientAuth=true|false|want)
打開TOMCAT_HOME\conf\server.xml,在<Service name="Catalina">下新增:
<Connector port="4433" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="true" sslProtocol="TLS" keystoreFile="e:/server.keystore" keystorePass="Aa123" truststoreFile="e:/server.keystore" truststorePass="Aa123"/>
六、讓客戶端導入證書,以便完成雙向認證,正常訪問
call e:/client.p12
七、導出服務端證書,安裝在客戶端(證書存儲位置:授信任的根證書頒發機構),以便創建信任鏈接,保證客戶端不會提示不信任的站點(若是服務端證書是經權威證書機構頒發,則無須執行該步驟)
keytool -export -alias key_server -keystore e:\server.keystore -storepass Aa123 -rfc -file e:\server.cer call e:/server.cer
八、啓動服務器,訪問驗證
輸入地址:https://d-f005227:4433,可愛的湯姆小貓出現了,且地址欄前面出現一把綠色的鎖,OK,打完收工!
附:在開啓雙向SSL認證(clientAuth=true)時,使用Firefox瀏覽器訪問會提示
這時須要手動按如下步驟導入客戶端證書:
菜單 --> 工具 --> 選項 --> 高級 --> 證書 --> 查看證書 --> 您的證書 --> 導入 --> 選擇client.p12 --> 輸入客戶端證書密鑰 --> 提示導入成功 --> 肯定 --> 刷新頁面 --> over
2、基於Nginx、Linux下OpenSSL密鑰工具
一、進入密鑰、證書文件存放路徑(自定義)
cd /etc/nginx/conf
二、生成2048位長的密鑰,並用des3加密
openssl genrsa -des3 -out server.key 2048
三、用step 2中生成的密鑰來生成服務端證書請求文件
openssl req -new -key server.key -out server.csr
若是step 2中採用des3加密了,須要輸入step 2設置的密碼
頒發者信息:
Country Name:兩字母國家代碼
State or Province Name:州或省份
Locality Name:城市或區域
Organization Name:組織名稱
Organizational Unit Name:組織單位名稱
Email Address:郵件地址
A challenge password:爲證書設置密碼
An optional company name:公司名稱(可不填寫)
四、使用step 2中生成的密鑰和step 3中生成的證書請求文件來生成服務端數字證書文件
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
五、Nginx配置
在http範圍內增長以下配置
server { listen 80; server_name localhost d-f005227; ssl on; ssl_certificate server.crt; ssl_certificate_key server.key; ssl_verify_client on; # 開啓客戶端認證 ssl_client_certificate client.crt; # 客戶端認證數字證書(生成方式省略) location / { proxy_pass http://localhost:8080 ; } }