https 單向認證和雙向認證配置

來源:互聯網
上載者:User

標籤:name   sts   bookmark   程式   code   環境   列表   end   類比   

HTTPS 是我們開發中經常用到的通訊加密技術,能有效保護我們網路訪問中的安全,本文主要講解單向 和 雙向 https 的配置。關於https 的實現原理在這裡我就不贅述了,附上阮一峰老師的關於https介紹幾篇部落格,有興趣的童鞋可以看一看:圖解SSL/TLS協議   數位簽章是什嗎?

本文目錄:

1、單向https配置

2、雙向https配置

3、常見名詞說明(轉載)

 

1.單向https 配置 
  • 產生https認證命令:
    sudo keytool -genkey -keyalg RSA -dname "cn=localhost,ou=none,o=none,l=shanghai,st=shanghai,c=cn" -alias server -keypass 123456 -keystore server.keystore -storepass 123456 -validity 3650                                        
  • 產生CSR檔案 本文只是產生自簽名的https認證,如果需要申請CA認證,就需要產生CSR檔案,並將此檔案提交給相應CA機構申請CA認證。
    sudo keytool -certReq -alias server -keystore server.keystore -file ca.csr -storepass 123456
  • 產生CER檔案
    因為我們產生的認證使用keytool產生的,沒有經過作業系統可信任的CA機構頒發,所以當用瀏覽器訪問時,會出現不信任認證警告,我們手工將cer檔案(服務端公開金鑰)匯入瀏覽器的認證列表,讓其信任。
    sudo keytool -export -alias server -keystore server.keystore -file ca.cer -storepass 123456

  • 在Tomcat中配置Https認證

   在serve.xml 中添加如下配置,即可訪問https的網站了。

<Connector SSLEnabled="true" clientAuth="false"            keystoreFile="/Users/beiyan/Documents/test/server.keystore"            keystorePass="123456" maxThreads="150" port="8443"            protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"            secure="true" sslProtocol="TLS" />

   其中keystoreFile 為認證的地址,keystorePass 為認證的密碼。

        訪問介面如下:

          

  • 匯入CER檔案,讓瀏覽器信任此認證雙擊 ca.cer 即可匯入,再設定為 始終信任 ,再次訪問
  • 應用程式訪問如果使用HttpClient 等工具訪問該Https串連時,需要講ca.cer 匯入jre中;
    命令如下:keytool -import -alias tomcatsso -file "ca.cer" -keystore "/Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre/lib/security/cacerts" -storepass 123456
    其中 /Library/Java/JavaVirtualMachines/jdk1.8.0_111.jdk/Contents/Home/jre 是jre目錄 123456 是jre預設的密碼
    2.雙向https配置
  • 產生Server端認證:
    sudo keytool -genkey -keyalg RSA -dname "cn=localhost,ou=none,o=none,l=shanghai,st=shanghai,c=cn" -alias server -keypass 123456 -keystore server.keystore -storepass 123456 -validity 3650
  • 產生用戶端認證:這裡的用戶端為瀏覽器,瀏覽器支援的認證格式為PKCS12,這裡產生PKCS12格式的認證:
    sudo keytool -genkey -v -alias client -keyalg RSA -storetype PKCS12 -dname "cn=localhost,ou=none,o=none,l=shanghai,st=shanghai,c=cn"  -keypass 123456 -storepass 123456 -keystore client.p12 -validity 3650
  • 讓服務端信任用戶端的認證由於是雙向認證,服務端必須驗證用戶端的身份,所以需要將用戶端的公開金鑰匯入到服務端的信任清單,但是這裡產生的PKCS12檔案不能直接匯入,所以先匯出成CER檔案,再將CER檔案匯入服務端的認證庫。
    1、將用戶端認證匯出為一個單獨的CER檔案
    sudo keytool -export -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer

    2、將CER檔案匯入服務端的認證庫
    sudo keytool -import -v -file client.cer -keystore server.keystore

    3、查看server.keystore 裡面的認證列表:
    sudo keytool -list -keystore server.keystore

    可以看到,認證庫中包含兩個認證,一個是服務端的私密金鑰,一個是用戶端的可信任公開金鑰

  • 讓用戶端信任服務端認證用戶端也需要驗證服務端的認證是否可靠,所以也需要將服務端認證的公開金鑰匯入用戶端的信任清單。通用的做法是將伺服器憑證匯出為一個單獨的CER檔案,然後雙擊安裝到瀏覽器的認證列表即可。
    sudo keytool -keystore server.keystore -export -alias server -file server.cer -validity 36500
  • 所有產生的認證列表如下:

    client.cer:用戶端認證的公開金鑰
    client.p12:用戶端認證的私密金鑰
    server.cer:服務端認證的公開金鑰
    server.keystore:服務端認證庫,既包含服務端私密金鑰,又包含用戶端公開金鑰

  • 修改Tomcat 配置:

       在serve.xml 中添加如下配置

  •  
    <Connector SSLEnabled="true" clientAuth="true"            keystoreFile="/Users/beiyan/Documents/test/keytool/server.keystore"            truststoreFile="/Users/beiyan/Documents/test/keytool/server.keystore"            truststorePass="123456" keystorePass="123456" maxThreads="150" port="8443"            protocol="org.apache.coyote.http11.Http11NioProtocol" scheme="https"            secure="true" sslProtocol="TLS" />
    clientAuth="true"表示雙向認證
  • 用戶端安裝私密金鑰雙擊client.p12即可安裝

    備忘(這裡是mac下面的設定方式,window 與此類似,雙擊進入安裝介面) 

  • 用戶端安裝服務端的公開金鑰雙擊server.cer檔案,設定同上

  • 成功訪問:

       彈出用戶端認證選擇介面,選擇用戶端認證,即可正常訪問
       
                                              選擇認證介面


         

                                       
3、jks,keystore,trustore,cer,pfx等名詞說明zhuan(轉自網路)

備忘:此處轉自網路,網路地點太多不確定源地址

密鑰:
公開金鑰+私密金鑰的統稱。

金鑰組:
公開金鑰(認證)和私密金鑰成對存在。通訊雙方各持有自己的私密金鑰和對方的公開金鑰。自己的私密金鑰需密切保護,而公開金鑰是公開給對方的。在windows下,單獨存在的公開金鑰一般是尾碼為.cer的檔案

A用自己的私密金鑰對資料加密,發給B,B用A提供的公開金鑰解密。同理B用自己的私密金鑰對資料加密,發送給A後,A用B的公開金鑰解開。

公開金鑰的兩個用途:
1。驗證對方身份:防止其他人假冒對方發送資料給你。
2。解密。
私密金鑰的兩個用途:
1。表明自己身份:除非第三方有你私密金鑰,否則無法假冒你發送資料資料給對方。
2。加密。

 

jks(Java key store):
Java用的儲存體金鑰的容器。可以同時容納n個公開金鑰或私密金鑰,尾碼一般是.jks或者.keystore或.truststore等,千奇百怪。不管什麼尾碼,它就是一個容器,各個公司或機構叫法不同而已。比如把只包含"受信任的公開金鑰"的容器存成.truststore檔案等。
用jdk\bin目錄下的keytool.exe對其進行查看,匯入,匯出,刪除,修改密碼等各種操作。可以對jks容器加密碼,輸入正確才可以操作此容器中密鑰。還有一個密碼的概念與上者不同,是jks中儲存著的私密金鑰的密碼,通常是絕密的。

 

pfx:
和jks功能相同但檔案格式不同,pfx是瀏覽器用的。
可以用一些工具程式把pfx轉化成jks格式供java程式使用(如銀行只提供了pfx,但是我們想用httpclient類比瀏覽器自動訪問時)。據說IE匯出的pfx格式不標準,轉化jks時往往報錯,可以嘗試用Netscape Navigator匯入再匯出,然後再轉化。碰到過這樣的情況。

常見的幾種https系統的訪問。經https協議的資料經過加密傳輸,防止第三方監聽,冒充和篡改。
1.不需要使用者做任何操作,比如https://www.verisign.com/
這是因為此公開金鑰是合法的(公開金鑰是可信任的機構頒發,和實際網域名稱吻合,而且沒有到期)。用IE訪問時空白處點右鍵可以查看公開金鑰資訊。
2.https的頁面會彈出公開金鑰確認提示
公開金鑰不合法(不是可信任的機構頒發,和實際網域名稱不吻合,已到期),但使用者點“是”即表示忽略危險,繼續訪問。
3.需要往瀏覽器倒入一個檔案才可訪問的
一般是銀行線上交易等特別需要安全的場合,站方(銀行)需要驗證訪客身份(如要確認必須是登入的網銀商戶),需要在瀏覽器中匯入含有訪客私密金鑰的pfx檔案。

 

產生jks:
在銀行沒有提供jks檔案的情況下對帳,需要自己產生jks
對於1,2類https網站,如果java程式訪問此地址時在jre預設的信任庫中找不到對方認證的頒發機構,則會拋出安全方面的異常。所以要將站方公開金鑰存進一個jks,並在環境變數中設定,表明信任此庫中的公開金鑰,才可以正常訪問。
我是用現成的make_jks的工具類在程式中讀取https://xxxx地址,程式自動抓取出銀行公開金鑰並存進一個jks檔案。
在瀏覽器中查看站方公開金鑰時,把公開金鑰匯出(一般是cer尾碼),然後用keytool.exe手工將此cer匯入一個jks或許也可以?沒試過。
以上1,2類https網站,僅僅是用到了公開金鑰的“驗證對方身份”功能。對於第3種https網站,也可以找到現成的程式把pfx直接轉成jks。既然動用了pfx,一般是把公開金鑰的兩個用途和私密金鑰的兩個用途都用起來

 

  

https 單向認證和雙向認證配置

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.