Java自簽名https證書

HTTPS搭建方案

一、 操作步驟

進入jdk的安裝目錄,切換到bin目錄下,然后按順序執行如下的命令
1、 創建一個密鑰庫server(服務器端密鑰庫) localhost配置

keytool -genkey -dname "CN=XX.XX.XX.XX,OU=ChinaMobile,O=ChinaMobile,L=HZ, ST=zhejiang, C=CN" -alias server -keyalg RSA -keystore /home/cxb/credential/server.jks -keypass xxx -storepass xxx -validity 36500

2、 導出自己創建的密鑰庫server別名server的證書為www.my.com.cer (服務器端證書)

keytool -export -alias server -file /home/cxb/credential/server.cer -keystore /home/cxb/credential/server.jks -storepass xxx

3、 創建一個密鑰庫client(客戶端密鑰庫)

keytool -genkey -dname "CN=client, OU= , O= , L=HZ, ST=zhejiang, C=CN" -alias client -keyalg RSA -keystore /home/cxb/credential/client.jks -keypass xxx -storepass xxx -validity 36500

4、 導出自己創建的密鑰庫client別名client的證書為client.cer(客戶端證書)

keytool -export -alias client -file /home/cxb/credential/client.cer -keystore /home/cxb/credential/client.jks -storepass xxx

5、 通過JAVA程序進行證書簽名(簽發者是密鑰庫client.jks中的client條目,待簽發者是server.cer。程序會產生一個新的密鑰庫newserver新密鑰hiifit;別名是signedserver )

Java實現

6、 導出密鑰庫newserver中的別名為signedserver為證書newserver.cer

keytool -export -file /home/cxb/credential/newserver.cer -keystore /home/cxb/credential/newserver.jks -storepass xxx -alias signedserver

7、 在密鑰庫server.jks中引入client.cer證書(服務端信任客戶端)

keytool -import -alias client -keystore /home/cxb/credential/server.jks -file /home/cxb/credential/client.cer -storepass xxx

8、 在密鑰庫server.jks中引入newserver.cer證書別名為server(覆蓋了老的服務端證書)

keytool -import -alias server -keystore /home/cxb/credential/server.jks -file /home/cxb/credential/newserver.cer -storepass xxx

9、 把證書mytest.cer發送給客戶端進行安裝

雙擊client.cer-->點擊安裝證書-->下一步-->將所有證書放入下列存儲區,瀏覽-->受信任的根證書頒發機構-->確定-->下一步-->完成-->是-->導入成功,確定-->確定;完成安裝
10、tomcat配置
修改server.xml
解開<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"的注釋,添加: keystoreFile="/home/cxb/credential/server.jks" keystorePass="xxx" truststoreFile="/home/cxb/credential/client.jks" truststorePass="xxx"

二、 幾點說明

1、 加密原理:
數字證書采用公鑰體制,即利用一對互相匹配的密鑰進行加密、解密。每個用戶自己設定一把特定的僅為本人所知的私有密鑰(私鑰),用它進行解密和簽名;同時設定一把公共密鑰(公鑰)并由本人公開,為一組用戶所共享,用于加密和驗證簽名。當發送一份保密文件時,發送方使用接收方的公鑰對數據加密,而接收方則使用自己的私鑰解密,這樣信息就可以安全無誤地到達目的地了。通過數字的手段保證加密過程是一個不可逆過程,即只有用私有密鑰才能解密(一般為RSA)。
2、tomcat中clientAuth配置為true時為雙向認證,false為單項驗證。
單向認證,就是傳輸的數據加密過了,但是不會校驗客戶端的來源
雙向認證,如果客戶端瀏覽器沒有導入客戶端證書,是訪問不了web系統的,找不到地址
如果只是加密,我感覺單向就行了。
如果想要用系統的人沒有證書就訪問不了系統的話,就采用雙向
3、采用自己簽發證書,可以不用去CA機構申請,因為只是內部客戶端間調用。(補充:數字證書綁定了公鑰、數字簽名及持有者的真實身份)
4、生成的密鑰倉庫的后綴名有很多,比如keystore,jks或者沒有后綴名都無所謂。其中,jks是一個java中的密鑰管理庫

三、 疑惑問題

1、 如何通過httpclient載入證書,發送請求?

keytool -import -file /home/cxb/credential/client.cer -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -alias client -storepass changeit

2、 CA機構頒發的證書的原理?(比如證書有沒有加密,又是如何揭秘的。)
3、 數字簽名的作用,難道僅僅是做身份辨認嗎?有沒有加密,如何加密解密 ?

四、 幾個重要命令

查看是否導入成功:通過命令行如下

keytool -v -list -keystore “%JAVA_HOME%\jre\lib\security\cacerts” -storepass changeit
刪除證書:

keytool -delete –alias server -keystore “%JAVA_HOME%\jre\lib\security\cacerts” -storepass changeit

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容