網絡(二):簡單易懂的https雙向認證自制安全證書和tomcat配置
網絡(三):簡單易懂的Android平臺Okhttp/Retrofit https證書配置
1芒率、環(huán)境
電腦環(huán)境配置%JAVA_HOME%/bin/keytool.exe(jdk下一個工具)
windwos10
tomcat 7.0
IE 11
2裹虫、何為證書
以下兩張截圖是瀏覽器查看證書的信息贷岸,它包含了各種信息头镊。
下面將列出幾個后相關綴名的證書和它的簡單介紹
keystore:
jks:數(shù)字證書庫。
p12:是PKCS12的縮寫羔砾。同樣是一個存儲私鑰的證書庫负间,由.jks文件導出的,用戶在PC平臺安裝姜凄,用于標示用戶的身份政溃。
cer:俗稱數(shù)字證書,目的就是用于存儲公鑰證書态秧,任何人都可以獲取這個文件 董虱。
bks:由于Android平臺不識別.keystore和.jks格式的證書庫文件,因此Android平臺引入一種的證書庫格式申鱼,BKS愤诱。
注:證書之間的轉換可以用工具portecle來進行轉換;在https中證書扮演者重要角色捐友,它保證頒發(fā)機構淫半、有效期、加密密鑰楚殿、加密算法等信息撮慨。
3、要生成的證書
1)https雙向認證:即客戶需要對服務器端身份進行認證脆粥,服務器端也需要對客戶端身份進行認證
2)為客戶端和服務器生成key,然后由key導出各自的證書
下面就開始生成個key和導出對應的證書砌溺,每一個步驟出命令和執(zhí)行的截圖。
為服務端生成keystore
keytool -genkeypair -alias server -keyalg RSA -validity 3650 -keystore F:\server.keystore
導出服務器證書
keytool -export -alias server -file F:\server.cer -keystore F:\server.keystore
生成客戶端key
keytool -genkeypair -alias client -keyalg RSA -validity 3650 -keystore F:\client.jks
導出客戶端證書
keytool -export -alias client -file F:\client.cer -keystore F:\client.jks
3)證書交換
證書互換的原因:只有你中有我变隔、我中有你规伐,在雙向認證時,我們才彼此認識匣缘,這個步驟非常重要2痢!肌厨!
將服務端的證書保存到 publickeys.jks中給客戶端用識別服務端時用
keytool -import -v -alias server -file F:\server.cer -keystore F:\publickeys.jks
將客戶端的證書保存到服務端的key中培慌,給服務端識別客戶端時用
你也可以通過list命令查看服務器的證書庫,可以看到兩個證書柑爸,一個是服務器證書吵护,一個是受信任的客戶端證書
至此,我們?yōu)榭蛻舳丝煞斩松闪嗣荑€表鳍,以及導出各自的證書馅而,并且為客戶端的密鑰和服務端的密鑰導入了對方的證書(雙向認證時用),接下來就要開始配置tomcat服務器了譬圣。
tomcat配置
1)首先把上述生成好的服務端密鑰放到tomcat的conf目錄下瓮恭,并修改server.xml文件配置,配置代碼如下:
//其他配置省略...
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="443"
/>
<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/server.keystore" keystorePass="123321"
truststoreFile="conf/server.keystore" truststorePass="123321"/>
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />
http的默認端口是80厘熟,https的默認端口是443屯蹦,不這樣配置會訪問不到服務器。
2)修改web.xml文件配置绳姨,在最末尾添加如下配置颇玷,代碼如下,讓http發(fā)起得請求交給https處理就缆。
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
這樣tomcat的配置就好了帖渠,非常簡單,重啟服務器即可
瀏覽器訪問https
IE瀏覽器
接下來就需要為PC端導入相關的證書了竭宰,由于PC瀏覽器中存儲的密鑰的正式格式為p12空郊,所以還需要把客戶端的證書jks格式轉為p12,證書的轉換可以使用portecle工具(具體使用的百度一下就會很對資料了)切揭;客戶端需要導入兩個證書狞甚,一個是存儲自己密鑰的key,一個是服務端為客戶端提供的公鑰證書,用與客戶對服務端的身份進行識別廓旬,證書的導入每一個過程都有截圖哼审,導入后重啟服務器即可。
1)安裝客戶端證書
2)安裝服務端證書
最后請求服務器返回結果