<noscript id="suqsu"><noscript id="suqsu"></noscript></noscript>
  • HTTPS單向認證和雙向認證

    發布時間:2020/6/30

    一、背景&概念


    HTTPS:在http(超文本傳輸協議)基礎上提出的一種安全的http協議,因此可以稱為安全的超文本傳輸協議。 http協議直接放置在TCP協議之上,而https提出在http和TCP中間加上一層加密層。從發送端看,這一層負責把http的內容加密后送到下層 的TCP,從接收方看,這一層負責將TCP送來的數據解密還原成http的內容。

    SSL(Secure Socket Layer):是Netscape公司設計的主要用于WEB的安全傳輸協議。從名字就可以看出它在https協議棧中負責實現上面提到的加密層。因此,一個https協議棧大致是這樣的:

    數字證書:一種文件的名稱,好比一個機構或人的簽名,能夠證明這個機構或人的真實性。其中包含的信息,用于實現上述功能。

    加密和認證:加密是指通信雙方為了防止銘感信息在信道上被第三方竊聽而泄漏,將明文通過加密變成密文,如果第三方無法解密的話,就算他獲得密文也無能為力;認證是指通信雙方為了確認對方是值得信任的消息發送或接受方,而不是使用假身份的非法者,采取的確認身份的方式。只有同時進行了加密和認證才能保證通信的安全,因此在SSL通信協議中這兩者都被應。早期一般是用對稱加密算法,現在一般都是不對稱加密,最常見的算法就是RSA。

    消息摘要:這個技術主要是為了避免消息被篡改。消息摘要是把一段信息,通過某種算法,得出一串字符串。這個字符串就是消息的摘要。如果消息被篡改(發生了變化),那么摘要也一定會發生變化(如果2個不同的消息生成的摘要是一樣的,那么這就叫發生了碰撞)。

    消息摘要的算法主要有MD5和SHA,在證書領域,一般都是用SHA(安全哈希算法)。

    數字證書、加密和認證、消息摘要三個技術結合起來,就是在HTTPS中廣泛應用的證書(certificate),證書本身攜帶了加密/解密的信息,并且可以標識自己的身份,也自帶消息摘要。

    HTTPS認證過程:

    ① 瀏覽器發送一個連接請求給安全服務器。

    ② 服務器將自己的證書,以及同證書相關的信息發送給客戶瀏覽器。

    ③ 客戶瀏覽器檢查服務器送過來的證書是否是由自己信賴的 CA 中心所簽發的。如果是,就繼續執行協議;如果不是,客戶瀏覽器就給客戶一個警告消息:警告客戶這個證書不是可以信賴的,詢問客戶是否需要繼續。

    ④ 接著客戶瀏覽器比較證書里的消息,例如域名和公鑰,與服務器剛剛發送的相關消息是否一致,如果是一致的,客戶瀏覽器認可這個服務器的合法身份。

    ⑤ 服務器要求客戶發送客戶自己的證書。收到后,服務器驗證客戶的證書,如果沒有通過驗證,拒絕連接;如果通過驗證,服務器獲得用戶的公鑰。

    ⑥ 客戶瀏覽器告訴服務器自己所能夠支持的通訊對稱密碼方案。

    ⑦ 服務器從客戶發送過來的密碼方案中,選擇一種加密程度最高的密碼方案,用客戶的公鑰加過密后通知瀏覽器。

    ⑧ 瀏覽器針對這個密碼方案,選擇一個通話密鑰,接著用服務器的公鑰加過密后發送給服務器。

    ⑨ 服務器接收到瀏覽器送過來的消息,用自己的私鑰解密,獲得通話密鑰。

    ⑩ 服務器、瀏覽器接下來的通訊都是用對稱密碼方案,對稱密鑰是加過密的。

    上面所述的是雙向認證 SSL 協議的具體通訊過程,這種情況要求服務器和用戶雙方都有證書。單向認證 SSL 協議不需要客戶擁有 CA 證書,具體的過程相對于上面的步驟,只需將服務器端驗證客戶證書的過程去掉,以及在協商對稱密碼方案,對稱通話密鑰時,服務器發送給客戶的是沒有加過密的 (這并不影響 SSL 過程的安全性)密碼方案。這樣,雙方具體的通訊內容,就是加過密的數據,如果有第三方攻擊,獲得的只是加密的數據,第三方要獲得有用的信息,就需要對加密 的數據進行解密,這時候的安全就依賴于密碼方案的安全。而幸運的是,目前所用的密碼方案,只要通訊密鑰長度足夠的長,就足夠的安全。這也是我們強調要求使用128 位加密通訊的原因。

    二、環境準備

    Oracle Linux Server release 6.5、JDK1.7.0_45、openssl-1.0.2d

    三、單向認證 3.1 為服務器生成證書

    keytool -genkey -keyalg RSA -dname "cn=127.0.0.1,ou=inspur,o=none,l=shandong,st=jinan,c=cn" -alias server -keypass 111111 -keystore server.keystore -storepass 111111 -validity 3650

    注:cn=127.0.0.1配置的是服務器IP

    3.2 生成csr

    生成csr文件用于提交CA認證生成證書使用。

    keytool -certReq -alias server -keystore server.keystore -file ca.csr

    3.3 生成cer

    這個ca.cer是為了解決不信任時要導入的

    keytool -export -alias server -keystore server.keystore -file ca.cer -storepass 111111

    3.4 tomcat配置ssl

    clientAuth="false"代表單向認證,配置如下:

    <Connector SSLEnabled="true" clientAuth="false"

            maxThreads="150" port="8443"

            protocol="org.apache.coyote.http11.Http11Protocol"或者HTTP/1.1

            scheme="https" secure="true" sslProtocol="TLS"

            keystoreFile="D:/server.keystore" keystorePass="111111"/>

    注: Http11Protocol支持HTTP/1.1協議,是http1.1協議的ProtocolHandler實現。

    3.5 解決不信任

    啟動tomcat,輸入 https://127.0.0.1:8443/

    這時提示框顯示:服務器的證書不受信任。在瀏覽器內顯示以下提示:

    此服務器無法證明它是127.0.0.1;您計算機的操作系統不信任其安全證書。出現此問題的原因可能是配置有誤或您的連接被攔截了。

    選擇“繼續前往(不安全)”,也能訪問,但是此時就是以普通的HTTP方式進行信息傳輸了。

    選擇安裝步驟3.3生成的ca.cer文件,將證書存儲在“受信任的證書頒發機構”,就可以通過HTTPS正常訪問了。

    3.6 解決程序訪問異常

    這時候如果用程序去訪問可能還會拋證書不信任的異常sun.security.validator.ValidatorException: PKIX path building failed...

    需要將生成的證書(ca.cer ) 導入到jdk中

    執行以下命令:

    keytool -import -alias tomcatsso -file "ca.cer" -keystore "D:javajdk1.6.0_11jrelibsecuritycacerts" -storepass changeit

    其中changeit是jre默認的密碼。

    如果拋 No subject alternative names present,請在生成keystore 注意CN必須要為域名(或機器名稱)例如 localhost 不能為IP 。

    如果拋 No name matching localhost found,表示你生成keystore CN的名稱和你訪問的名稱不一致。

    四、雙向認證 4.1 目錄建立

    Linux環境下,在home下建立out32dll目錄,在此目錄下建立ca、client、server三個文件夾。以下命令均在out32dll目錄下執行。

    4.2 生成CA證書

    創建私鑰 :

    openssl genrsa -out ca/ca-key.pem 1024

    創建證書請求 :

    openssl req -new -out ca/ca-req.csr -key ca/ca-key.pem

    -----

    Country Name (2 letter code) [AU]:cn 
    State or Province Name (full name) [Some-State]:beijing
    Locality Name (eg, city) []:fengtai
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:DKY 
    Organizational Unit Name (eg, section) []:0953
    Common Name (eg, YOUR name) []:CA
    Email Address []:20095335@mail.besti.edu.cn

    彈出密碼輸入選項,Enter默認即可

    自簽署證書 :

    openssl x509 -req -in ca/ca-req.csr -out ca/ca-cert.pem -signkey ca/ca-key.pem -days 3650

    將證書導出成瀏覽器支持的.p12格式 :

    openssl pkcs12 -export -clcerts -in ca/ca-cert.pem -inkey ca/ca-key.pem -out ca/ca.p12

    密碼:111111

    4.3 生成Server證書

    一.   1.創建私鑰 : 
    openssl genrsa -out server/server-key.pem 1024 
    2.創建證書請求 : 
    openssl req -new -out server/server-req.csr -key server/server-key.pem 
    ----- 
    Country Name (2 letter code) [AU]:cn 
    State or Province Name (full name) [Some-State]:beijing 
    Locality Name (eg, city) []:fengtai
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:DKY 
    Organizational Unit Name (eg, section) []:0953
    Common Name (eg, YOUR name) []:222.28.129.224   注意:一定要寫服務器所在的ip地址 
    Email Address []:20095335@mail.besti.edu.cn

    彈出密碼輸入選項,Enter默認即可

    3.自簽署證書 : 
    openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650 
    4.將證書導出成瀏覽器支持的.p12格式 : 
    openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12 
    密碼:111111

    4.4 生成Clinet證書

    創建私鑰 :

    openssl genrsa -out client/client-key.pem 1024

    創建證書請求 :openssl req -new -out client/client-req.csr -key client/client-key.pem

    -----

    Country Name (2 letter code) [AU]:cn

    State or Province Name (full name) [Some-State]:Beijing

    Locality Name (eg, city) []:fengtai
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:DKY

    Organizational Unit Name (eg, section) []:0953

    Common Name (eg, YOUR name) []:Client

    Email Address []:20095335@mail.besti.edu.cn      

    Please enter the following ’extra’ attributes to be sent with your certificate request 
    A challenge password []:123456 
    An optional company name []:tsing 
    3.自簽署證書 :

    openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 3650 
    4.將證書導出成瀏覽器支持的.p12格式 : 
    openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12 
    密碼:111111

    4.5 根據CA證書生成jks文件

    keytool -keystore truststore.jks -keypass 222222 -storepass 222222 -alias ca -import -trustcacerts -file /home/out32dll/ca/ca-cert.pem

    4.6 tomcat配置ssl

    tomcat6.0的配置:修改conf/server.xml。 將keystoreFile、truststoreFile的路徑填寫為正確的放置路徑。如下圖:

    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"

                    maxThreads="150" scheme="https" secure="true"

                    clientAuth="true" sslProtocol="TLS"

                    keystoreFile="server.p12" keystorePass="111111"  keystoreType="PKCS12"

                    truststoreFile="truststore.jks" truststorePass="222222" truststoreType="JKS"/>

    4.7 導入證書

    將ca.p12,client.p12分別導入到IE中去(打開IE->Internet選項->內容->證書)。 ca.p12導入至 受信任的根證書頒發機構,client.p12導入至個人。

    五、瀏覽器驗證

    驗證ssl配置是否正確訪問你的應用https://服務器ip:8443/,如果配置正確的話,

    單向認證方式會直接跳轉到地址,并且https顯示綠色。

    雙向認證方式會出現請求你數字證書的對話框,選擇確定,再跳轉到地址,并且https顯示綠色。

    六、幫助 6.1 Tomcat—server.xml—Connector屬性

    屬性

    說明

    clientAuth

    設置是否雙向驗證,默認為false,設置為true代表雙向驗證

    keystoreFile

    服務器證書文件路徑

    keystorePass

    服務器證書密碼

    truststoreFile

    用來驗證客戶端證書的根證書,此例中就是服務器證書

    truststorePass

    根證書密碼

     

    6.2 keytool

    Keytool是一個Java數據證書的管理工具,Keytool將密鑰和證書存在一個稱為keystore的文件中。常用命令屬性如下:

    命令屬性

    說明

    -genkey

    在用戶主目錄中創建一個默認文件".keystore",還會產生一個mykey的別名,mykey中包含用戶的公鑰、私鑰和證書

    -alias

    別名,每個keystore都關聯一個唯一的alias,通常不區分大小寫

    -keystore

    指定密鑰庫的名稱(產生的各類信息將不在.keystore文件中)

    -keyalg

    指定密鑰的算法(如 RSA  DSA(如果不指定默認采用DSA)

    -validity

    指定創建的證書有效期多少天

    -keysize

    指定密鑰長度

    -storepass

    指定密鑰庫的密碼(獲取keystore信息所需的密碼)

    -keypass

    指定別名條目的密碼(私鑰的密碼)

    -dname

    指定證書擁有者信息。例如:"CN=名字與姓氏,OU=組織單位名稱,O=組織名稱,L=城市或區域名稱,ST=省份名稱,C=單位的兩字母國家代碼"

    -list

    顯示密鑰庫中的證書信息

    -v

    顯示密鑰庫中的證書詳細信息

    -export

    將別名指定的證書導出到文件,例:

    keytool   -export -alias 需要導出的別名 -keystore 指定keystore -file 指定導出的證書位置及證書名稱 -storepass 密碼

    -file

    參數指定導出到文件的文件名

    -delete

    刪除密鑰庫中某條目,例:

    keytool -delete -alias 指定需刪除的別名 -keystore 指定keystore  -storepass 密碼

    -printcert

    查看導出的證書信息,例:keytool   -printcert -file yushan.crt

    -keypasswd

    修改密鑰庫中指定條目口令,例:

    keytool -keypasswd -alias 需修改的別名 -keypass 舊密碼 -new  新密碼  -storepass keystore密碼  -keystore

    -import

    將已簽名數字證書導入密鑰庫,例:

    keytool -import -alias 指定導入條目的別名 -keystore 指定keystore -file 需導入的證書

    91久久夜色精品,强奷很舒服好爽好爽,野花免费观看高清视频6
    <noscript id="suqsu"><noscript id="suqsu"></noscript></noscript>