最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Keytool工具的介紹與使用方法

  發(fā)布時間:2023-04-29 21:38:13   作者:無名之輩   我要評論
這篇文章主要為大家介紹了Keytool.exe,keytools.exe是一個 Java數(shù)據(jù)證書的管理工具, Keytool將密鑰(key)和證書(certificates)存在一個稱為 keystore的文件中,需要的朋友可以參考下

一、keytool 簡介

Keytool 是一個 Java數(shù)據(jù)證書的管理工具, Keytool將密鑰(key)和證書(certificates)存在一個稱為 keystore的文件中。

keystore 文件介紹

在 keystore里,包含兩種數(shù)據(jù):

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

我們常說的證書就是就是上面的公鑰,公鑰是公開給其它人使用的。

證書后綴解釋

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

Tips:

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

 二、keytool 命令詳解

 密鑰和證書管理工具

-certreq            生成證書請求
-changealias        更改條目的別名
-delete             刪除條目
-exportcert         導出證書(簡寫 export)
-genkeypair         生成密鑰對(簡寫 genkey)
-genseckey          生成密鑰
-gencert            根據(jù)證書請求生成證書
-importcert         導入證書或證書鏈(簡寫 import)
-importpass         導入口令
-importkeystore     從其他密鑰庫導入一個或所有條目
-keypasswd          更改條目的密鑰口令
-list               列出密鑰庫中的條目
-printcert          打印證書內容
-printcertreq       打印證書請求的內容
-printcrl           打印 CRL 文件的內容
-storepasswd        更改密鑰庫的存儲口令

Tips:

  • 使用 ketytool --help 獲取所有可用命令
  • 使用 keytool -command_name -help 來獲取 command_name 的用法

常用參數(shù)

-genkey         產生密鑰對(genkeypair 簡寫);表示要創(chuàng)建一個新的密鑰;alias和keystore缺省時,在用戶主目錄中創(chuàng)建一個”.keystore”文件,且別名為mykey,包含用戶的公鑰、私鑰證書
-alias          產生證書別名,和keystore關聯(lián)的唯一別名,不區(qū)分大小寫(默認 `mykey`)
-keystore       指定密鑰庫文件的名稱(默認在用戶主目錄創(chuàng)建證書庫)
-keyalg         指定密鑰的算法(可選擇密鑰算法:`RSA`、`DSA`、`EC`,默認`DSA`)
-keysize        指定密鑰長度(與keyalg默認對應關系:`RSA=2048`、`DSA=2048`、`EC=256`)
-sigalg         指定簽名算法(MD5和 SHA1的簽名算法已經不安全)
-validity       指定證書有效期天數(shù)(默認 `90`天)
-storepass      指定密鑰庫口令,推薦與keypass一致(獲取keystore信息所需的密碼)
-storetype      指定密鑰庫的類型,可用類型為:JKS、PKCS12等。(jdk9以前,默認為JKS。自jdk9開始,默認為PKCS12)
-keypass        指定別名條目口令(私鑰的密碼)
-dname          指定證書發(fā)行者信息(其中 CN 要和服務器的 `域名` 或 `IP` 相同,本地測試則使用localhost,其他的可以不填)
-list           顯示密鑰庫中的證書信息
-v              詳細輸出,顯示密鑰庫中的證書詳細信息
-file           指定導出或導出的文件名
-export         將別名指定的證書導出到文件(exportcert 簡寫)
-import         將已簽名數(shù)字證書導入密鑰庫(importcert 簡寫)
-printcert      查看導出的證書信息
-delete         刪除密鑰庫中某條目
-keypasswd      修改密鑰庫中指定條目口令
-storepasswd    修改keystore口令
-ext            X.509 擴展

Tips:

  • 所有密碼長度必須大于或等于 6 位
  • keyalg 指定加密算法;可以選擇的密鑰算法有:RSA、DSA(默認)、EC。
  • sigalg 指定簽名算法(MD5和 SHA1的簽名算法已經不安全):
    • keyalg = RSA 時,簽名算法有:MD5withRSA、SHA1withRSA、SHA256withRSA(默認)、SHA384withRSA、SHA512withRSA
    • keyalg = DSA 時,簽名算法有:SHA1withDSA、SHA256withDSA(默認)
  • dname 表明了密鑰的發(fā)行者身份(Distinguished Names)
    • CN = 域名或IP(Common Name) 注:生成服務器證書時,CN要和服務器的 域名 或 IP 相同,本地測試則使用localhost,其他的可以不填(客戶端證書無要求)
    • OU = 組織單位名稱(Organization Unit)
    • O = 組織名稱(Organization Name)
    • L = 城市或區(qū)域名稱(Locality Name)
    • ST = 州或省份名稱(State Name)
    • C = 國家的簡寫(Country,CN 代表中國)

三、證書操作

創(chuàng)建證書

創(chuàng)建秘鑰庫(keystore),秘鑰庫是存儲一個或多個密鑰條目的文件,每個密鑰條目應該以一個別名標識,它包含密鑰和證書相關信息。

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     產生密鑰對(genkeypair 簡寫)
-alias      證書別名;和keystore關聯(lián)的唯一別名,這個alias通常不區(qū)分大小寫(默認`mykey`)
-keyalg     指定加密算法,RSA:非對稱加密(默認`DSA`)
-sigalg     指定簽名算法,可選;
-keysize    指定密鑰長度,可選;
-keypass    指定別名條目口令(私鑰的密碼)
-storetype  生成證書類型,可用的證書庫類型為:JKS、PKCS12等。(jdk9以前,默認為JKS。自jdk9開始,默認為PKCS12)
-keystore   指定產生的密鑰庫的位置;
-storepass  指定密鑰庫的存取口令,推薦與keypass一致
-validity   證書有效期天數(shù);(默認為 90天)
-dname      表明了密鑰的發(fā)行者身份(Distinguished Names)生成證書時,其中 CN 要和服務器的 `域名` 或 `IP` 相同,本地測試則使用localhost,其他的可以不填
-ext        X.509 擴展

Tips:

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

導出證書信息

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

  • 認證證書與導出的服務器自簽名證書作用一致,使用時取其中一種證書即可。兩者主要區(qū)別為是否經證書機構認證;
  • 使用自簽名證書則無需生成證書簽名請求(CSR),使用認證證書則無需導出服務器自簽名證書;
  • 大部分認證證書都是收費的;

導出自簽名證書

自簽名證書沒有經過證書認證機構進行認證,但并不影響使用,我們可以使用相應的命令對證書進行導出;

Usage:

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

Options:

-export     執(zhí)行證書導出操作(exportcert 簡寫)
-alias      密鑰庫中的證書條目別名(jks里可以存儲多對公私鑰文件,通過別名指定導出的公鑰證書)
-keystore   指定密鑰庫文件
-storepass  密鑰庫口令
-file       導出文件的輸出路徑
-rfc        使用Base64格式輸出(輸出pem編碼格式的證書,文本格式),不適用則導出的證書為DER編碼格式

獲取認證證書(生成證書簽名請求)

如果想得到證書認證機構的認證,則不使用上述的自簽名證書,需要使用步驟導出數(shù)字證書并簽發(fā)申請(Cerificate Signing Request),經證書認證機構認證并頒發(fā)后,再將認證后的證書導入本地密鑰庫與信任庫。

Usage:

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

Options:

-certreq 執(zhí)行證書簽發(fā)申請導出操作
-alias 密鑰庫中的證書條目別名
-keystore 密鑰庫文件名稱
-storepass 密鑰庫口令
-file 輸出的csr文件路徑

導入證書庫

雙向認證: 將各自的公鑰證書分別導入對方的信任庫,使客戶端和服務端相互信任。

Usage:

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

Options:

-import 執(zhí)行證書導入操作(importcert 簡寫)
-alias 指定導入密鑰庫中的證書別名(指定的條目別名不能與密鑰庫中已存在的條目別名重復(導入簽發(fā)證書除外))
-trustcacerts 將證書導入信任庫(信任來自 cacerts 的證書)
-keystore 密鑰庫名稱
-storepass 密鑰庫口令
-file 輸入文件名

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

安裝服務器證書

(將服務器公鑰證書導入客戶端)

雙向認證: 客戶端信任服務端: 在客戶機器上雙擊證書文件完成導入操作(window中導入)安裝公鑰證書

安裝公鑰證書

將服務器公鑰證書(cer | crt等格式文件)發(fā)往客戶端機器
--> 雙擊該證書進入“證書信息”頁
--> 點擊【安裝證書】進入“證書導入向導”首頁
--> 點擊【下一步】
--> 選中【將所有的證書都放入下列存儲】,然后單擊【瀏覽】
--> 選擇【受信任的根證書頒發(fā)機構】并點擊【確定】
--> 點擊【下一步】
--> 點擊【完成】。然后彈出提示【導入完成】。

安裝客戶端證書

將客戶端證書(jsk | p12等格式文件)發(fā)往客戶端機器
--> 雙擊該證書進入“證書導入向導”首頁
--> 點擊【下一步】
--> 點擊【下一步】
--> 輸入證書密碼(keystore密碼)并點擊【下一步】
--> 點擊【下一步】(這里也可以自己指定證書儲存)
--> 點擊【完成】。然后彈出提示【導入完成】。

查看證書

Usage:

 查看單個證書(cer | crt)
keytool -printcert -file <cert_file> [-v|-rfc]

查看密鑰庫中的證書條目

keytool -list [-alias <alias_name>] -keystore <keystore_file> -storepass <keystore_passwd> [-v|-rfc]

 查看生成的CSR證書請求

keytool -printcertreq -file <certreq_file>

Options:

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

其他命令

# 刪除keystore里面指定證書條目
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證書(查看 JVM的信任庫中的證書,storepass 默認為changeit)
## 該證書文件存在于JAVA_HOME\jre\lib\security目錄下,是Java系統(tǒng)的CA證書倉庫,可以用 'alias' 來查看證書是否真的導入到JVM中
keytool -list -v [-alias clientCer] -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit

# 導入新的CA到信任證書,導入到 JRE的信任證書庫
## 常出現(xiàn)的異常:“未找到可信任的證書” -- 主要原因為在客戶端未將服務器下發(fā)的證書導入到JVM中。
keytool -import -trustcacerts -alias clientCer -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file ~/ssl/client.cer

四、栗子

SSL單向證書認證配置#

  1. 創(chuàng)建服務器證書

  2. 導出服務器公鑰證書

  3. 將服務器公鑰證書導入客戶端(客戶端信任服務器)

  4. 配置 Tomcat/conf/server.xml,找到如下原注釋內容,并修改如下:

<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"
/>

Keytool 配置Tomcat的 HTTPS單向認證:

https://www.cnblogs.com/librarookie/p/16806817.html

SSL雙向證書認證配置

  1. 創(chuàng)建服務器證書,創(chuàng)建客戶端證書

  2. 導出服務器公鑰證書,導出客戶端公鑰證書

  3. 將服務器公鑰證書導入客戶端(客戶端信任服務器)

  4. 將客戶端公鑰證書導入信任庫(服務器信任客戶端)

  5. 配置 Tomcat/conf/server.xml,并開啟雙向認證(clientAuth的值改為true)

<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"
/>

Keytool 配置Tomcat的 HTTPS雙向認證:

https://www.cnblogs.com/librarookie/p/16807218.html

五、常見問題

瀏覽器訪問時,出現(xiàn)的提示與可能原因:

此服務器無法證實它是“192.168..” - 您計算機的操作系統(tǒng)不信任其安全證書 。。。

-- 客戶端未導入服務器證書

此服務器無法證實它就是“192.168..” - 它的安全證書沒有指定主題備用名稱 。。。

-- 生成服務器證書庫未使用 -ext參數(shù)

“192.168..”不接受您的登錄證書,或者您可能沒有提供登錄證書。。。

-- Tomcat配置開了雙向認證,且未指定信任證書庫(truststore)

Via

到此這篇關于Keytool工具的介紹與使用方法的文章就介紹到這了,更多相關Keytool用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持腳本之家!

相關文章

最新評論

奉贤区| 顺昌县| 荔浦县| 霍林郭勒市| 乌海市| 如皋市| 册亨县| 肇州县| 武穴市| 清丰县| 灌南县| 内江市| 盐城市| 介休市| 阳新县| 玉环县| 赤水市| 开化县| 鸡泽县| 太湖县| 宁化县| 湘潭县| 自贡市| 凌云县| 遵义县| 安多县| 金昌市| 德昌县| 南华县| 赤水市| 新绛县| 海原县| 南部县| 景东| 盈江县| 土默特左旗| 汝城县| 灌云县| 赤水市| 墨脱县| 定南县|