Java安全教程–创建SSL连接和证书的分步指南
在有關應用JEE安全性的系列文章中,我們為您提供了另一個有關如何在Java EE應用程序中創建SSL連接和創建證書的詳細教程。 如我們之前的文章中所述, 安全套接字層(SSL)/傳輸層安全性(TLS)將啟用客戶端和Web服務器之間的安全連接。 客戶端將使用HTTPS連接來使用Web資源。 Java提供了各種基于安全性的API,可以幫助與客戶端建立安全連接并以加密格式發送/接收消息:
- Java密碼體系結構(JCA)
- Java密碼擴展(JCE)
- Java安全套接字擴展(JSSE)
為了啟用SSL連接,Web服務器需要具有數字證書 ,該數字證書將允許客戶端信任Web應用程序的真實性。 想要發送加密消息的應用程序向證書頒發機構(CA)申請數字證書。 CA驗證應用程序所有者詳細信息和其他標識詳細信息,并頒發數字證書。
在公鑰基礎結構(PKI)方案中,數字證書由CA頒發,其中包含專有名稱(DN)/所有者的名稱/主題,用于唯一標識證書的序列號,所有者的公鑰,發行日期,有效期,專有CA的名稱,頒發機構(CA)的數字簽名,用于創建簽名的簽名算法 。 CA頒發的數字證書可以保存在注冊表中,以便進行身份驗證的用戶可以使用所有者的公共密鑰。
瀏覽器如何使用證書識別應用程序或網站的真實性?
所有商業CA與主要的Web瀏覽器都有關系,因此其根證書將嵌入在其瀏覽器中。 可以通過證書存儲檢查瀏覽器的SSL兼容性,該證書存儲提供有關存儲在瀏覽器存儲中的CA證書的信息。 另外,CA網站還提供有關瀏覽器的SSL兼容性的信息。
下圖顯示了示例網站http://abcgen.uk的證書詳細信息。 下面的證書向客戶保證所有者的真實性已得到驗證,并且數字證書已頒發給ABCGen Idiotechie plc,其通用名稱為www.abcgen.uk。
注意:出于安全原因,我們未對實時網站進行任何引用。 本文中使用的示例僅用于說明和學習目的。 此示例顯示證書由Verisign頒發為Class 3,這表示Verisign已對所有者進行了獨立的驗證和確認。 這不是指定的PKI標準。 下一個字段表示此證書的有效性。 指紋表示公鑰,但采用編碼格式。 使用密碼散列函數SHA1和MD5對數據進行散列。
樣本證書詳細信息
下圖顯示了證書層次結構。 第一項表示根證書,第二項表示擴展的驗證。 證書頒發機構(CA)提供稱為擴展驗證的更高安全性證書。 所有主要的Web瀏覽器的密鑰庫都將包含有關根和擴展驗證的信息,這將使它們能夠驗證特定應用程序的真實性。
證書層次結構
希望大家都明白了。 現在讓我們嘗試一些編碼。
使用的產品:
- IDE: Netbeans 7.2
- Java開發套件(JDK):版本6
- Glassfish服務器: 3.1
- 身份驗證機制:基于表單的身份驗證
- 驗證服務器: LDAP OpenDS v2.2
目的:
在Web服務器和客戶端之間創建SSL連接。
步驟1:
在Glassfish服務器中創建服務器證書
在Windows中打開命令提示符->轉到{domain_dir} / config目錄,其中{domain_dir}表示Glassfish域路徑。
例如C:\ NetBeans \ 7.2 \ config \ GF3 \ domain1 \ config>
第2步:
我們將使用keytool命令生成證書。 Keytool是Java SE 6提供的密鑰和證書管理實用程序。
運行keytool命令,如下所示:
第三步:
將生成的證書導出到server.cer文件。
>keytool -export -alias server-alias -storepass changeit -file server.cer -keystore keysto re.jks Certificate stored in file <server.cer>第四步:
將證書添加到信任存儲文件
>keytool -import -v -trustcacerts -alias server-alias -file server.cer -keystore cacerts.j ks -keypass changeit -storepass changeit Owner: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB Issuer: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB Serial number: 519e7165 Valid from: Thu May 23 20:43:33 BST 2013 until: Wed Aug 21 20:43:33 BST 2013 Certificate fingerprints: MD5:? 34:B7:71:CD:C9:56:9A:EA:0C:F2:91:50:EA:7F:4B:64 SHA1: AA:DE:EC:1B:27:8E:BC:3A:7A:82:8C:B7:FA:C3:AA:11:2F:97:1F:2C Signature algorithm name: SHA1withRSA Version: 3 Trust this certificate? [no]:? YES Certificate was added to keystore [Storing cacerts.jks]步驟5:
驗證證書是否已成功添加到密鑰庫中。
>keytool -list -v -keystore keystore.jks Enter keystore password: Alias name: server-alias Creation date: 23-May-2013 Entry type: PrivateKeyEntry Certificate chain length: 1 Certificate[1]: Owner: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB Issuer: CN=localhost, OU=idiotechie, O=idiotechie, L=edinburgh, ST=EDN, C=GB Serial number: 519e7165 Valid from: Thu May 23 20:43:33 BST 2013 until: Wed Aug 21 20:43:33 BST 2013 Certificate fingerprints: MD5:? 34:B7:71:CD:C9:56:9A:EA:0C:F2:91:50:EA:7F:4B:64 SHA1: AA:DE:EC:1B:27:8E:BC:3A:7A:82:8C:B7:FA:C3:AA:11:2F:97:1F:2C Signature algorithm name: SHA1withRSA Version: 3步驟6:
驗證證書是否已成功添加到信任存儲中。
>keytool -list -keystore cacerts.jks Enter keystore password:server-alias, 23-May-2013, trustedCertEntry, Certificate fingerprint (MD5): 34:B7:71:CD:C9:56:9A:EA:0C:F2:91:50:EA:7F:4B:64 因此,現在證書在密鑰庫和信任庫中都可用。 密鑰庫包含服務器的私鑰,而信任庫僅包含CA證書或公用密鑰。 這是對證書和密鑰的更清晰的劃分,其中可以將私鑰保存在密鑰庫中更安全的環境中,而將公鑰保留在信任庫中的更易訪問的選項中。
但是,在此示例中,由于我們沒有CA證書,因此服務器證書存儲在受信任的存儲區中。
步驟7:
從服務器配置的角度來看,讓我們轉到服務器管理控制臺。
然后單擊配置->服務器配置-> HTTP服務-> http-listeners-2。
Http-Listeners-2表示安全的HTTPS端口8181。 單擊SSL選項卡,然后根據我們上面創建的證書將“證書昵稱”修改為“服務器別名”。
應用程序服務器SSL設置
步驟8:
重新啟動服務器。
至此,所有與服務器相關的配置都已完成。
讓我們進入應用程序代碼。
我們將使用與http://idiotechie.com/secure-web-application-in-java-ee6-using-ldap/相同的應用程序代碼。
唯一需要的更改是在web.xml中 ,其中的傳輸保證將從無更改為機密。
<user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint>當應用程序希望阻止其他實體查看傳輸內容時,將使用機密保護模式。
生成,部署和運行應用程序。
現在,即使您嘗試鍵入URL http:// localhost:9999 / SampleWebApp / index.jsp ,服務器也會通過https:// localhost:8181 / SampleWebApp / index.jsp將用戶重定向到安全的HTTPS連接。 由于服務器生成的證書是自簽名證書,而不是來自CA的證書,因此瀏覽器會發出警告消息,通知您無法信任網站的安全證書。 這是因為瀏覽器的信任庫不包含這些證書。
安全的應用程序
我們可以將證書添加到瀏覽器的例外列表中,以避免將來出現警告。 現在,讓我們嘗試從Mozilla Firefox瀏覽器檢查示例應用程序的證書詳細信息:
Localhost證書詳細信息
希望我的讀者能夠理解如何創建數字證書和保護Web應用程序。 如果您喜歡本文,請在社交網站上分享,并幫助我們成長。
在下面下載示例代碼:
翻譯自: https://www.javacodegeeks.com/2013/06/java-security-tutorial-step-by-step-guide-to-create-ssl-connection-and-certificates.html
總結
以上是生活随笔為你收集整理的Java安全教程–创建SSL连接和证书的分步指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 携程最新财报:二季度净营收112亿元 同
- 下一篇: Xbox Series S|X 版《我的