1.介紹了密碼學(xué)的相關(guān)基礎(chǔ)知識(shí)后,本文介紹如何在tomcat上搭建https服務(wù)。
環(huán)境:jdk7,tomcat7,windows7
2.我們使用java中自帶的javatool工具來(lái)制作所需的https所需的證書(shū),keytool是java自帶的用于密鑰和證書(shū)的生成和管理工具。
3.這里先介紹兩個(gè)文件格式:
jks(java key store),用來(lái)存儲(chǔ)密鑰已經(jīng)數(shù)字證書(shū)的文件
csr(Certificate Signing Request),證書(shū)請(qǐng)求文件(就是證書(shū)申請(qǐng)者向相關(guān)證書(shū)頒發(fā)機(jī)構(gòu)申請(qǐng)證書(shū)時(shí)所提交的文件,機(jī)構(gòu)使用其根證書(shū)私鑰簽名就生成了證書(shū)公鑰文件--證書(shū))。
cer:用于存儲(chǔ)公鑰證書(shū)的文件(就是數(shù)字證書(shū))
4.在開(kāi)始之前我們先明白我們應(yīng)該怎樣做:
4.1.先制作一個(gè)根證書(shū)(用于簽發(fā)服務(wù)證書(shū))
4.2.生成一個(gè)CSR格式的證書(shū)請(qǐng)求文件
4.3.用根證書(shū)對(duì)證書(shū)請(qǐng)求文件做簽名,并生成服務(wù)證書(shū)
4.4.將根證書(shū)添加到瀏覽器受信任的根證書(shū)頒發(fā)機(jī)構(gòu)中
4.5.配置tomcat,使之支持https,并為它指明已經(jīng)簽發(fā)好的服務(wù)證書(shū)的路徑
4.6.部署一個(gè)web應(yīng)用,并訪問(wèn)。
5.我們先進(jìn)入命令行窗口,輸入keytool,顯示如下:
我們可以看到,有生成證書(shū)請(qǐng)求,生成密鑰對(duì),根據(jù)證書(shū)請(qǐng)求生成證書(shū)等想關(guān)命令。
Step1:生成根證書(shū)
keytool -genkeypair -alias ROOTCERT -keyalg RSA -keystore rootlib.jks
命令解釋:生成一對(duì)RSA非對(duì)稱密鑰和一個(gè)自簽名證書(shū),以別名ROOTCERT存儲(chǔ)在rootlib中。
注意:enter后,會(huì)提示輸入密鑰庫(kù)的使用口令,和填寫(xiě)相關(guān)OU,CN等信息。如下圖:
之后會(huì)在你的當(dāng)前工作目錄下生成一個(gè)rootlib.jks的文件。
Step2:生成證書(shū)請(qǐng)求
1)keytool -genkeypair -alias SERVERCERT -keyalg RSA -keystore serverlib.jks (跟step1步驟一樣)。
注意:此時(shí)”您的名字與姓氏是什么” ,需要輸入localhost(就是證書(shū)請(qǐng)求者的域名)。
2)keytool -certreq -file server.csr -alias SERVERCERT -keystore serverlib.jks
命令解釋:在serverlib文件中從別名為SERVERCERT中取出公鑰和用戶信息生 成證書(shū)請(qǐng)求,并寫(xiě)入到server.csr文件中。
之后會(huì)在你的當(dāng)前工作目錄下生成一個(gè)server.csr的文件。
Step3:用根證書(shū)對(duì)證書(shū)請(qǐng)求簽名,生成應(yīng)用證書(shū)
keytool -gencert -infile server.csr -outfile servercert.cer -alias ROOTCERT -keystore rootlib.jks
命令解釋:使用別名為ROOTCERT的私鑰對(duì)server.csr證書(shū)請(qǐng)求進(jìn)行簽發(fā)證書(shū),并導(dǎo)入到servercert.cer 文件中。
Step4:導(dǎo)出根證書(shū),添加為客戶端受信任的根證書(shū)頒發(fā)機(jī)構(gòu)中
1)keytool -exportcert -alias ROOTCERT -file root.cer -keystore rootlib.jks
命令解釋:從rootlib.jks將別名ROOTCERT的證書(shū)導(dǎo)出到root.cer文件中
2)回到圖形界面,切到命令窗口的工作目錄下,會(huì)有5個(gè)文件。
雙擊root.cer
點(diǎn)擊安裝證書(shū),然后下一步,注意:
在證書(shū)存儲(chǔ)時(shí),選擇放入指定的證書(shū)存儲(chǔ),點(diǎn)擊瀏覽,選擇受信任的根證書(shū)頒發(fā) 機(jī)構(gòu),然后確認(rèn),下一步,完成,確認(rèn)添加,即可。
Step5:配置tomcat
1)我們先要更新serverlib.jks中的證書(shū)(用根證書(shū)簽發(fā)好的應(yīng)用證書(shū)--servercert.cer)
keytool -importcert -alias SERVERCERT -file server.cer -keystore serverlib.jks
此時(shí)會(huì)報(bào):無(wú)法從回復(fù)中建立鏈(這是因?yàn)楦碌淖C書(shū)無(wú)法信任)。我們先要將根證書(shū)導(dǎo)入到serverlib.jks中,使之信任
2)keytool -importcert -alias TRUSTCERT -file root.cer -keystore serverlib.jks
3)這是在執(zhí)行1)中的命令,即可更新。
注意:更新證書(shū)時(shí)的別名不能寫(xiě)錯(cuò),否則keytool工具會(huì)認(rèn)為添加。
4)現(xiàn)在開(kāi)始配置tomcat,修改server.xml文件
<Connector port="443" PRotocol="org.apache.coyote.http11.Http11Protocol"
minSpareThreads="5" maxSpareThreads="75"
enableLookups="true" disableUploadTimeout="true"
acceptCount="100" maxThreads="200" SSLEnabled="true"
scheme="https" secure="true"
keystoreFile="E:/key/serverlib.jks" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>
clientAuth:設(shè)置是否雙向驗(yàn)證,默認(rèn)為false,設(shè)置為true代表雙向驗(yàn)證,這里我們一般只做服務(wù)器驗(yàn)證
keystoreFile:服務(wù)器證書(shū)文件路徑
keystorePass:服務(wù)器證書(shū)密碼
truststorePass:根證書(shū)密碼
注意:tomcat中https端口是8443,我改成了443(https的默認(rèn)端口),需要將http的redirectPort值也要改成443,這樣瀏覽器發(fā)送https請(qǐng)求時(shí)才可以重定向到修改的443端口上。
5)部署一個(gè)web應(yīng)用,修改首頁(yè)index.jsp
將應(yīng)用添加到tomcat中,啟動(dòng)tomcat。
在地址欄輸入:
點(diǎn)擊Login
此時(shí)再看地址欄,我們點(diǎn)擊https前面的鎖,就可以看到我們的應(yīng)用證書(shū)了。
在點(diǎn)擊證書(shū)信息,就可以看我們申請(qǐng)的證書(shū)內(nèi)容了,此時(shí)我們?cè)儆么淼姆绞阶グ缦拢?/p>
瀏覽器與服務(wù)器之間數(shù)據(jù)就會(huì)被加密后在傳輸了。
注意:在step2時(shí),我們生成證書(shū)請(qǐng)求時(shí)的 ”您的名字與姓氏是什么”的值需要我們的服務(wù)的主機(jī)名,如果不一致的瀏覽器訪問(wèn)時(shí)就會(huì)報(bào)錯(cuò),如下圖
這樣,一個(gè)簡(jiǎn)單https協(xié)議服務(wù)我們就搭建好了。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注