成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

關(guān)于Keytool配置 Tomcat的HTTPS雙向認(rèn)證的問(wèn)題

瀏覽:207日期:2023-03-19 16:52:00
目錄
  • 證書(shū)生成
    • keytool 簡(jiǎn)介
    • keytool 命令詳解
    • 創(chuàng)建證書(shū)
      • 創(chuàng)建證書(shū)栗子
    • 導(dǎo)出證書(shū)信息
      • 導(dǎo)出自簽名證書(shū)
      • 獲取認(rèn)證證書(shū)(生成證書(shū)簽名請(qǐng)求)
  • 生成證書(shū)簽名請(qǐng)求栗子
    • 導(dǎo)入證書(shū)庫(kù)
      • 導(dǎo)入證書(shū)栗子
    • 查看證書(shū)
      • 查看栗子證書(shū)
    • 其他keytool命令
      • SSL單向證書(shū)認(rèn)證配置
  • Tomcat服務(wù)認(rèn)證配置
    • SSL雙向證書(shū)認(rèn)證配置
      • 配置Tomcat服務(wù) HTTP自動(dòng)跳轉(zhuǎn)到 HTTPS(按需選配)
      • 測(cè)試
        • 常見(jiàn)問(wèn)題

          證書(shū)生成

          keytool 簡(jiǎn)介

          Keytool是一個(gè)Java數(shù)據(jù)證書(shū)的管理工具, Keytool將密鑰(key)和證書(shū)(certificates)存在一個(gè)稱(chēng)為keystore的文件中。
          在keystore里,包含兩種數(shù)據(jù):

          • 密鑰實(shí)體(Key entity)——密鑰(secret key)又或者是私鑰和配對(duì)公鑰(采用非對(duì)稱(chēng)加密)
          • 可信任的證書(shū)實(shí)體(trusted certificate entries)——只包含公鑰

          我們常說(shuō)的證書(shū)就是就是上面的公鑰,公鑰是公開(kāi)給其它人使用的

          • 證書(shū)后綴解釋
          • jks 是Java的keytool證書(shū)工具支持的證書(shū)私鑰格式;
          • pfx 是微軟支持的私鑰格式(p12是pfx的新格式);
          • cer / crt 是證書(shū)的公鑰格式(cer是crt證書(shū)的微軟形式)
          • csr 數(shù)字證書(shū)簽名請(qǐng)求文件(Cerificate Signing Request)

          Tips:

          • .der .cer : 此證書(shū)文件是二進(jìn)制格式,只含有證書(shū)信息,不包含私鑰。
          • .crt : 此證書(shū)文件是二進(jìn)制格式或文本格式,一般為文本格式,功能與 .der.cer 證書(shū)文件相同。
          • .pem : 此證書(shū)文件一般是文本格式,可以存放證書(shū)或私鑰,或者兩者都包含。
          • .pem 文件如果只包含私鑰,一般用 .key 文件代替。
          • .pfx .p12 : 此證書(shū)文件是二進(jìn)制格式,同時(shí)包含證書(shū)和私鑰,且一般有密碼保護(hù)。
          • .keystore .truststore : 兩者本質(zhì)都是keystore,都是儲(chǔ)存密鑰的容器:
          • 不過(guò)兩者存放的密鑰所有者不同,keystore是存儲(chǔ)自己的公鑰和私鑰而,truststore是存儲(chǔ)自己信任對(duì)象的公鑰。約定通過(guò)文件名稱(chēng)區(qū)分類(lèi)型以及用途
          • truststore 是必須的,如果我們沒(méi)有顯式的指定,那么java會(huì)默認(rèn)指定為 $JAVA_HOME/lib/security/cacerts 這個(gè)文件
          • java 在jdk 中已經(jīng)默認(rèn)在 $JAVA_HOME/lib/security/cacerts 這個(gè)文件中預(yù)置了常用的證書(shū)
          • 不同語(yǔ)言需要的證書(shū)格式并不一致,比如說(shuō)Java采用jks,.Net采用pfx和cer,Php則采用pem和cer;
          • 區(qū)別證書(shū)的不是后綴名,而是文件的格式和內(nèi)容。

          keytool 命令詳解

          • 密鑰和證書(shū)管理工具
          -certreq    生成證書(shū)請(qǐng)求
          -changealias更改條目的別名
          -delete     刪除條目
          -exportcert 導(dǎo)出證書(shū)(簡(jiǎn)寫(xiě) export)
          -genkeypair 生成密鑰對(duì)(簡(jiǎn)寫(xiě) genkey)
          -genseckey  生成密鑰
          -gencert    根據(jù)證書(shū)請(qǐng)求生成證書(shū)
          -importcert 導(dǎo)入證書(shū)或證書(shū)鏈(簡(jiǎn)寫(xiě) import)
          -importpass 導(dǎo)入口令
          -importkeystore     從其他密鑰庫(kù)導(dǎo)入一個(gè)或所有條目
          -keypasswd  更改條目的密鑰口令
          -list       列出密鑰庫(kù)中的條目
          -printcert  打印證書(shū)內(nèi)容
          -printcertreq       打印證書(shū)請(qǐng)求的內(nèi)容
          -printcrl   打印 CRL 文件的內(nèi)容
          -storepasswd更改密鑰庫(kù)的存儲(chǔ)口令
          

          Tips:

          • 使用 ketytool --help 獲取所有可用命令
          • 使用 keytool -command_name -help 來(lái)獲取 command_name 的用法
          • 常用參數(shù)
          -genkey 產(chǎn)生密鑰對(duì)(genkeypair 簡(jiǎn)寫(xiě));表示要?jiǎng)?chuàng)建一個(gè)新的密鑰;alias和keystore缺省時(shí),在用戶(hù)主目錄中創(chuàng)建一個(gè)”.keystore”文件,且別名為mykey,包含用戶(hù)的公鑰、私鑰證書(shū)
          -alias  產(chǎn)生證書(shū)別名,和keystore關(guān)聯(lián)的唯一別名,不區(qū)分大小寫(xiě)(默認(rèn) `mykey`)
          -keystore       指定密鑰庫(kù)文件的名稱(chēng)(默認(rèn)在用戶(hù)主目錄創(chuàng)建證書(shū)庫(kù))
          -keyalg 指定密鑰的算法(可選擇密鑰算法:`RSA`、`DSA`、`EC`,默認(rèn)`DSA`)
          -keysize指定密鑰長(zhǎng)度(與keyalg默認(rèn)對(duì)應(yīng)關(guān)系:`RSA=2048`、`DSA=2048`、`EC=256`)
          -sigalg 指定簽名算法(MD5和 SHA1的簽名算法已經(jīng)不安全)
          -validity       指定證書(shū)有效期天數(shù)(默認(rèn) `90`天)
          -storepass      指定密鑰庫(kù)口令,推薦與keypass一致(獲取keystore信息所需的密碼)
          -storetype      指定密鑰庫(kù)的類(lèi)型,可用類(lèi)型為:JKS、PKCS12等。(jdk9以前,默認(rèn)為JKS。自jdk9開(kāi)始,默認(rèn)為PKCS12)
          -keypass指定別名條目口令(私鑰的密碼)
          -dname  指定證書(shū)發(fā)行者信息(其中 CN 要和服務(wù)器的域名相同,本地測(cè)試則使用localhost,其他的可以不填)
          -list   顯示密鑰庫(kù)中的證書(shū)信息
          -v      詳細(xì)輸出,顯示密鑰庫(kù)中的證書(shū)詳細(xì)信息
          -file   指定導(dǎo)出或?qū)С龅奈募?-export 將別名指定的證書(shū)導(dǎo)出到文件(exportcert 簡(jiǎn)寫(xiě))
          -import 將已簽名數(shù)字證書(shū)導(dǎo)入密鑰庫(kù)(importcert 簡(jiǎn)寫(xiě))
          -printcert      查看導(dǎo)出的證書(shū)信息
          -delete 刪除密鑰庫(kù)中某條目
          -keypasswd      修改密鑰庫(kù)中指定條目口令
          -storepasswd    修改keystore口令
          -ext    X.509 擴(kuò)展
          • 所有密碼長(zhǎng)度必須大于或等于 6 位
          • keyalg 指定加密算法;可以選擇的密鑰算法有:RSA、DSA(默認(rèn))、EC。
          • sigalg 指定簽名算法(MD5和 SHA1的簽名算法已經(jīng)不安全):
          • keyalg = RSA 時(shí),簽名算法有:MD5withRSA、SHA1withRSA、SHA256withRSA(默認(rèn))、SHA384withRSA、SHA512withRSA
          • keyalg = DSA 時(shí),簽名算法有:SHA1withDSA、SHA256withDSA(默認(rèn))
          • dname 表明了密鑰的發(fā)行者身份(Distinguished Names)
            • CN = 域名或IP(Common Name) 注:生成服務(wù)器證書(shū)時(shí),CN要和服務(wù)器的域名相同,本地測(cè)試則使用localhost,其他的可以不填(客戶(hù)端證書(shū)無(wú)要求)
            • OU = 組織單位名稱(chēng)(Organization Unit)
            • O = 組織名稱(chēng)(Organization Name)
            • L = 城市或區(qū)域名稱(chēng)(Locality Name)
            • ST = 州或省份名稱(chēng)(State Name)
            • C = 國(guó)家的簡(jiǎn)寫(xiě)(Country,CN 代表中國(guó))

          創(chuàng)建證書(shū)

          創(chuàng)建秘鑰庫(kù)(keystore),秘鑰庫(kù)是存儲(chǔ)一個(gè)或多個(gè)密鑰條目的文件,每個(gè)密鑰條目應(yīng)該以一個(gè)別名標(biāo)識(shí),它包含密鑰和證書(shū)相關(guān)信息。

          Usage:

          keytool -genkey 
          -alias <alias> 
          -keyalg RSA 
          [-sigalg SHA256withRSA] 
          [-keysize 2048] 
          -keypass <keypasswd> 
          -keystore <keystore_file> 
          -storetype JKS|PKCS12 
          -storepass <keystore_passwd> 
          -validity 3650 
          -dname "CN=github.com,OU=github.com,Inc.,O=Github, Inc.,L=San Francisco,ST=California,C=US" 
          -ext SAN=dns:github.com,dns:www.github.com,ip:127.0.0.1 
          

          Options:

          -genkey     產(chǎn)生密鑰對(duì)(genkeypair 簡(jiǎn)寫(xiě))
          -alias      證書(shū)別名;和keystore關(guān)聯(lián)的唯一別名,這個(gè)alias通常不區(qū)分大小寫(xiě)(默認(rèn)`mykey`)
          -keyalg     指定加密算法,RSA:非對(duì)稱(chēng)加密(默認(rèn)`DSA`)
          -sigalg     指定簽名算法,可選;
          -keysize    指定密鑰長(zhǎng)度,可選;
          -keypass    指定別名條目口令(私鑰的密碼)
          -storetype  生成證書(shū)類(lèi)型,可用的證書(shū)庫(kù)類(lèi)型為:JKS、PKCS12等。
          -keystore   指定產(chǎn)生的密鑰庫(kù)的位置;
          -storepass  指定密鑰庫(kù)的存取口令,推薦與keypass一致
          -validity   證書(shū)有效期天數(shù);(默認(rèn)為 90天)
          -dname      表明了密鑰的發(fā)行者身份(Distinguished Names)生成證書(shū)時(shí),其中 CN 要和服務(wù)器的域名相同,本地測(cè)試則使用localhost,其他的可以不填
          -extX.509 擴(kuò)展
          

          Tips:

          • 此處需要注意:MD5和SHA1的簽名算法已經(jīng)不安全;
          • 如果Tomcat所在服務(wù)器的域名不是“localhost”時(shí),瀏覽器會(huì)彈出警告窗口,提示用戶(hù)證書(shū)與所在域不匹配。
          • 服務(wù)器證書(shū) dname的 CN應(yīng)改為對(duì)應(yīng)的域名,如“www.github.com”;在本地做開(kāi)發(fā)測(cè)試時(shí),CN應(yīng)填入“localhost”;
          • 客戶(hù)端證書(shū) dname的 CN可以是任意值,且不用使用 -ext擴(kuò)展。

          創(chuàng)建證書(shū)栗子

          生成服務(wù)器證書(shū)

          keytool -genkey -alias server -keyalg RSA -keypass 123456 -keystore ~/ssl/tomcat.jks [-storetype JKS] -storepass 123456 -validity 3650 -dname "CN=localhost" -ext SAN=ip:127.0.0.1

          生成客戶(hù)端證書(shū),以便讓服務(wù)器來(lái)驗(yàn)證它。為了能將證書(shū)順利導(dǎo)入至IE和Firefox,證書(shū)格式應(yīng)該是PKCS12(客戶(hù)端的CN可以是任意值)

          keytool -genkey -alias client -keyalg RSA -keypass 123456 -keystore ~/ssl/client.p12 -storetype PKCS12 -storepass 123456 -validity 3650 -dname "CN=client"

          導(dǎo)出證書(shū)信息

          此證書(shū)文件不包含私鑰;分為自簽名證書(shū)和認(rèn)證證書(shū),下面分別介紹了兩中證書(shū)的生成方式

          • 認(rèn)證證書(shū)與導(dǎo)出的服務(wù)器自簽名證書(shū)作用一致,使用時(shí)取其中一種證書(shū)即可。兩者主要區(qū)別為是否經(jīng)證書(shū)機(jī)構(gòu)認(rèn)證;
          • 使用自簽名證書(shū)則無(wú)需生成證書(shū)簽名請(qǐng)求(CSR),使用認(rèn)證證書(shū)則無(wú)需導(dǎo)出服務(wù)器自簽名證書(shū);
          • 大部分認(rèn)證證書(shū)都是收費(fèi)的;

          導(dǎo)出自簽名證書(shū)

          自簽名證書(shū)沒(méi)有經(jīng)過(guò)證書(shū)認(rèn)證機(jī)構(gòu)進(jìn)行認(rèn)證,但并不影響使用,我們可以使用相應(yīng)的命令對(duì)證書(shū)進(jìn)行導(dǎo)出;

          Usage:

          keytool -export 
          -alias <alias> 
          -keystore <keystore_file> 
          -storepass <keystore_passwd> 
          -file <file_cer>    
          [-rfc] 
          

          Options:

          -export     執(zhí)行證書(shū)導(dǎo)出操作(exportcert 簡(jiǎn)寫(xiě))
          -alias      密鑰庫(kù)中的證書(shū)條目別名(jks里可以存儲(chǔ)多對(duì)公私鑰文件,通過(guò)別名指定導(dǎo)出的公鑰證書(shū))
          -keystore   指定密鑰庫(kù)文件
          -storepass  密鑰庫(kù)口令
          -file       導(dǎo)出文件的輸出路徑
          -rfc使用Base64格式輸出(輸出pem編碼格式的證書(shū),文本格式),不適用則導(dǎo)出的證書(shū)為DER編碼格式
          

          導(dǎo)出證書(shū)栗子

          導(dǎo)出服務(wù)器證書(shū)

          此處為服務(wù)器的自簽名證書(shū)導(dǎo)出, 如果需要使用認(rèn)證證書(shū),則生成證書(shū)簽名請(qǐng)求

          keytool -export -alias server -keystore ~/ssl/tomcat.jks -storepass 123456 -file ~/ssl/server.cer

          導(dǎo)出客戶(hù)端證書(shū)

          雙向認(rèn)證: 服務(wù)端信任客戶(hù)端,由于不能直接將PKCS12格式的證書(shū)庫(kù)導(dǎo)入,所以必須先把客戶(hù)端證書(shū)導(dǎo)出為一個(gè)單獨(dú)的CER文件

          keytool -export -alias client -keystore ~/ssl/client.p12 -storepass 123456 -file ~/ssl/client.cer -rfc

          獲取認(rèn)證證書(shū)(生成證書(shū)簽名請(qǐng)求)

          如果想得到證書(shū)認(rèn)證機(jī)構(gòu)的認(rèn)證,則不使用上述的自簽名證書(shū),需要使用步驟導(dǎo)出數(shù)字證書(shū)并簽發(fā)申請(qǐng)(Cerificate Signing Request),經(jīng)證書(shū)認(rèn)證機(jī)構(gòu)認(rèn)證并頒發(fā)后,再將認(rèn)證后的證書(shū)導(dǎo)入本地密鑰庫(kù)與信任庫(kù)。

          Usage:

          keytool -certreq 
          -alias <alias> 
          -keystore <keystore_file> 
          -storepass <keystore_passwd> 
          -file <file_csr> 
          

          Options:

          -certreq    執(zhí)行證書(shū)簽發(fā)申請(qǐng)導(dǎo)出操作
          -alias      密鑰庫(kù)中的證書(shū)條目別名
          -keystore   密鑰庫(kù)文件名稱(chēng)
          -storepass  密鑰庫(kù)口令
          -file       輸出的csr文件路徑
          

          生成證書(shū)簽名請(qǐng)求栗子

          生成證書(shū)簽名請(qǐng)求(CSR)

          keytool -certreq -alias server -keystore ~/ssl/tomcat.jks -storepass 123456 -file ~/ssl/certreq.csr

          查看生成的CSR證書(shū)請(qǐng)求

          keytool -printcertreq -file certreq.csr

          導(dǎo)入證書(shū)庫(kù)

          雙向認(rèn)證: 將各自的公鑰證書(shū)分別導(dǎo)入對(duì)方的信任庫(kù),使客戶(hù)端和服務(wù)端相互信任。

          Usage:

          keytool -import 
          [-trustcacerts] 
          -alias <alias_cer> 
          -keystore <keystore_file>
          -storepass <keystore_passwd> 
          -file <file_cer> 
          

          Options:

          -import     執(zhí)行證書(shū)導(dǎo)入操作(importcert 簡(jiǎn)寫(xiě))
          -alias      指定導(dǎo)入密鑰庫(kù)中的證書(shū)別名(指定的條目別名不能與密鑰庫(kù)中已存在的條目別名重復(fù)(導(dǎo)入簽發(fā)證書(shū)除外))
          -trustcacerts    將證書(shū)導(dǎo)入信任庫(kù)(信任來(lái)自 cacerts 的證書(shū))
          -keystore   密鑰庫(kù)名稱(chēng)
          -storepass  密鑰庫(kù)口令
          -file       輸入文件名
          

          導(dǎo)入證書(shū)栗子

          1.安裝服務(wù)器證書(shū)(將服務(wù)器公鑰證書(shū)導(dǎo)入客戶(hù)端)

          雙向認(rèn)證: 客戶(hù)端信任服務(wù)端: 在客戶(hù)機(jī)器上雙擊證書(shū)文件完成導(dǎo)入操作(window中導(dǎo)入)

          • 將服務(wù)器公鑰證書(shū) server.cer 發(fā)往客戶(hù)端機(jī)器 >> 雙擊該證書(shū)進(jìn)入“證書(shū)信息”頁(yè) >> 點(diǎn)擊【安裝證書(shū)】進(jìn)入“證書(shū)導(dǎo)入向?qū)?rdquo;首頁(yè) >> 點(diǎn)擊【下一步】>> 選中【將所有的證書(shū)都放入下列存儲(chǔ)】,然后單擊【瀏覽】 >> 選擇【受信任的根證書(shū)頒發(fā)機(jī)構(gòu)】b并點(diǎn)擊【確定】 >> 點(diǎn)擊【下一步】 >> 點(diǎn)擊【完成】。然后彈出提示【導(dǎo)入完成】。
          • 將客戶(hù)端證書(shū) client.p12 發(fā)往客戶(hù)端機(jī)器 >> 雙擊該證書(shū)進(jìn)入“證書(shū)導(dǎo)入向?qū)?rdquo;首頁(yè) >> 點(diǎn)擊【下一步】>> 點(diǎn)擊【下一步】>> 輸入證書(shū)密碼(keystore密碼)并點(diǎn)擊【下一步】 >> 點(diǎn)擊【下一步】 >> 點(diǎn)擊【完成】。然后彈出提示【導(dǎo)入完成】。

          2.證書(shū)導(dǎo)入信任庫(kù)(將客戶(hù)端公鑰證書(shū)導(dǎo)入信任庫(kù))

          雙向認(rèn)證: 服務(wù)端信任客戶(hù)端:

          keytool -import -alias clientCert -keystore ~/ssl/truststore.jks -storepass 123456 -file ~/ssl/client.cer

          此步驟會(huì)生成信任證書(shū) truststore.jks文件, 文件存放需要信任的公鑰證書(shū),如客戶(hù)端證書(shū)(也可以將 keystore值改為服務(wù)器密鑰庫(kù),即tomcat.jks。此時(shí)的tomcat.jks 就同時(shí)是服務(wù)的密鑰庫(kù)和信任庫(kù))

          查看證書(shū)

          Usage:

          # 查看單個(gè)證書(shū)(cer | crt)
          keytool -printcert -file <cert_file> [-v|-rfc]
          
          # 查看密鑰庫(kù)中的證書(shū)條目
          keytool -list [-alias <alias_name>] -keystore <keystore_file> -storepass <keystore_passwd> [-v|-rfc]
          
          # 查看生成的CSR證書(shū)請(qǐng)求
          keytool -printcertreq -file <certreq_file>     
          

          Options:

          -alias      密鑰庫(kù)中的證書(shū)條目別名;
          -keystore   指定密鑰庫(kù)文件;
          -storepass  密鑰庫(kù)口令;
          -printcert  執(zhí)行證書(shū)打印命令;
          -list       缺省情況下,命令打印證書(shū)的 MD5 指紋。
              而如果指定了 -v 選項(xiàng),將以可讀格式打印證書(shū),
              如果指定了 -rfc 選項(xiàng),將以可打印的編碼格式輸出證書(shū)。
          

          查看栗子證書(shū)

          查看證書(shū)信息

          keytool -printcert -file ~/ssl/client.cer [-v|-rfc]

          查看密鑰庫(kù)

          keytool -list -keystore ~/ssl/tomcat.jks -storepass 123456 -v

          查看base64的內(nèi)容(即PEM編碼)

          keytool -list -keystore ~/ssl/tomcat.jks -storepass 123456 -rfc

          其他keytool命令

          # 刪除keystore里面指定證書(shū)條目
          keytool -delete -alias <alias> -keystore <keystore_file> -storepass <keystore_passwd>
          # 修改條目別名
          keytool -changealias -keystore <keystore_file> -alias <old_alias> -destalias <new_alias>
          # 修改條目密碼
          keytool -keypasswd -alias <alias> -keypass <old_keypasswd> -new <new_keypasswd> -keystore <keystore_file> -storepass <keystore_passwd>
          # 修改keysore密碼
          keytool -storepasswd -new <new_storepasswd> -keystore <keystore_file> -storepass <old_storepasswd>
          # 列出信任的CA證書(shū)(查看 JVM的信任庫(kù)中的證書(shū),storepass 默認(rèn)為changeit)
          ## 該證書(shū)文件存在于JAVA_HOME\jre\lib\security目錄下,是Java系統(tǒng)的CA證書(shū)倉(cāng)庫(kù),可以用 "alias" 來(lái)查看證書(shū)是否真的導(dǎo)入到JVM中
          keytool -list -v [-alias clientCer] -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
          # 導(dǎo)入新的CA到信任證書(shū),導(dǎo)入到 JRE的信任證書(shū)庫(kù)
          ## 常出現(xiàn)的異常:“未找到可信任的證書(shū)”  -- 主要原因?yàn)樵诳蛻?hù)端未將服務(wù)器下發(fā)的證書(shū)導(dǎo)入到JVM中。
          keytool -import -trustcacerts -alias clientCer -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file ~/ssl/client.cer
          

          Tomcat服務(wù)認(rèn)證配置

          打開(kāi)Tomcat_HOME/conf/server.xml,找到如下原注釋內(nèi)容,并修改如下:

          <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="true" sslProtocol="TLS"
              keystoreFile="~/ssl/tomcat.jks" keystorePass="123456"
              truststoreFile="~/ssl/truststore.jks" truststorePass="123456"
          />
          

          Tips:

          • 其中 clientAuth 指定是否需要驗(yàn)證客戶(hù)端證書(shū)
          • false : 表示單向SSL驗(yàn)證,即服務(wù)端認(rèn)證;
          • true : 表示強(qiáng)制雙向SSL驗(yàn)證,必須驗(yàn)證客戶(hù)端證書(shū);
          • want : 表示可以驗(yàn)證客戶(hù)端證書(shū),但如果客戶(hù)端沒(méi)有有效證書(shū),也不強(qiáng)制驗(yàn)證。
          • 如果設(shè)置了clientAuth="true",則需要強(qiáng)制驗(yàn)證客戶(hù)端證書(shū)。可通過(guò)雙擊 p12 文件將證書(shū)導(dǎo)入至瀏覽器;
          • 瀏覽器的HTTP缺省端口為 80 , HTTPS缺省端口為 443
          • keystoreFile /keystorePass : 服務(wù)器證書(shū)文件和密碼;
          • truststoreFile /truststorePass : 信任證書(shū)文件和密碼;用來(lái)驗(yàn)證客戶(hù)端的。

          SSL單向證書(shū)認(rèn)證配置

          創(chuàng)建服務(wù)器證書(shū)導(dǎo)出服務(wù)器公鑰證書(shū)將服務(wù)器公鑰證書(shū)導(dǎo)入客戶(hù)端(客戶(hù)端信任服務(wù)器)配置 Tomcat
          打開(kāi)Tomcat_HOME/conf/server.xml,找到如下原注釋內(nèi)容,并修改如下:

          <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="false" sslProtocol="TLS"
              keystoreFile="~/ssl/tomcat.jks" keystorePass="123456"()
          />

          SSL雙向證書(shū)認(rèn)證配置

          • 創(chuàng)建服務(wù)器證書(shū),創(chuàng)建客戶(hù)端證書(shū)
          • 導(dǎo)出服務(wù)器公鑰證書(shū),導(dǎo)出客戶(hù)端公鑰證書(shū)
          • 將服務(wù)器公鑰證書(shū)導(dǎo)入客戶(hù)端(客戶(hù)端信任服務(wù)器)
          • 將客戶(hù)端公鑰證書(shū)導(dǎo)入信任庫(kù)(服務(wù)器信任客戶(hù)端)
          • 配置 Tomcat,并開(kāi)啟雙向認(rèn)證():

          打開(kāi)Tomcat_HOME/conf/server.xml,找到如下原注釋內(nèi)容,并修改如下:

          <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
              maxThreads="150" scheme="https" secure="true"
              clientAuth="true" sslProtocol="TLS"
              keystoreFile="~/ssl/tomcat.jks" keystorePass="123456"
              truststoreFile="~/ssl/truststore.jks" truststorePass="123456"
          />

          配置Tomcat服務(wù) HTTP自動(dòng)跳轉(zhuǎn)到 HTTPS(按需選配)

          打開(kāi)Tomcat_HOME/conf/web.xml,在 與 加入如下代碼:

          <login-config> 
              <!-- Authorization setting for SSL --> 
              <auth-method>CLIENT-CERT</auth-method> 
              <realm-name>Client Cert Users-only Area</realm-name> 
          </login-config> 
          <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> 

          測(cè)試

          • 啟動(dòng) Tomcat項(xiàng)目
          • 訪問(wèn) 項(xiàng)目地址,本地配置如: https://localhost:8443/
          • 如果遇到“不安全”的提示,可能是客戶(hù)端未安裝服務(wù)器證書(shū)

          常見(jiàn)問(wèn)題

          瀏覽器訪問(wèn)時(shí)提示:

          • 此服務(wù)器無(wú)法證實(shí)它是“192.168..” - 您計(jì)算機(jī)的操作系統(tǒng)不信任其安全證書(shū) 。。。
          • --客戶(hù)端未導(dǎo)入服務(wù)器證書(shū)
          • 此服務(wù)器無(wú)法證實(shí)它就是“192.168..” - 它的安全證書(shū)沒(méi)有指定主題備用名稱(chēng) 。。。
          • --生成服務(wù)器證書(shū)庫(kù)未使用 -ext參數(shù)
          • “192.168..”不接受您的登錄證書(shū),或者您可能沒(méi)有提供登錄證書(shū)。。。
          • --Tomcat配置未指定信任證書(shū)庫(kù)(truststore)

          Reference

          到此這篇關(guān)于Keytool配置 Tomcat的HTTPS雙向認(rèn)證的文章就介紹到這了,更多相關(guān)Tomcat HTTPS雙向認(rèn)證內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

          標(biāo)簽: Tomcat