# SSL keytool 各參數說明 <!-- ![](https://i.imgur.com/K2VXN9n.png) --> ## SSL(Secure Sockets Layer) SSL分成兩層 1. SSL紀錄協議建立在TCP之上,為高層協議提供數據封裝、壓縮、加密等基本功能支持 #### 查詢keystore可讀資訊 -v: > keytool -list -v -keystore lucas.keystore -storepass 666666 #### 查詢keystore編碼資訊 -rfc: > keytool -list -rfc -keystore lucas.keystore -storepass 666666 #### 查詢certified資訊 : > keytool -printcert -file lucas.crt ## 環境使用金鑰及憑證製作 ##### 一、製作localhost證書(特別注意CN的名稱需與域名相同) > keytool -genkey -alias localhost -keystore localhost.jks -keypass 666666 -storepass 666666 -keyalg RSA -keysize 2048 -validity 90 -v -dname "CN=localhost, OU=西瓜科技, O=軟體公司, L=台北市, ST=中正區, C=TW" ##### 二、將第一步的金鑰庫export出證書(localhost.crt) > keytool -export -alias localhost -keystore localhost.jks -storepass 666666 -file localhost.crt ##### 三、將證書加入jks檔,此jks檔不需存在,會自動建立 **★可用於信任服務端所發送之證書驗證(也就是加入信任庫用)** > keytool -import -alias localhost -file localhost.crt -keystore clientTrustKeystore.jks -storepass 666666 ##### 四、製作client證書(特別注意CN) > keytool -genkey -alias client -keystore clientKeystore.jks -keypass 666666 -storepass 666666 -keyalg RSA -keysize 2048 -validity 3650 -v -dname "CN=client, OU=西瓜科技, O=軟體公司, L=台北市, ST=中正區, C=TW" ##### 五、將第四部的金鑰庫export出證書(client.crt) > keytool -export -alias client -keystore clientKeystore.jks -storepass 666666 -file client.crt openssl pkcs12 -in mycert.p12 -nokeys -cacerts -out ca-cert.pem ##### 六、將client證書加入信任庫(jks不在自產、在則加入) > keytool -import -alias client -file client.crt -keystore localhostTrustKey.jks -storepass 666666 ##### 七、將.jks轉成.p12~~~~ > keytool -importkeystore -srckeystore clientKeystore.jks -destkeystore clientKeystore.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass 666666 -deststorepass 666666 -srckeypass 666666 -destkeypass 666666 -srcalias client -destalias client -noprompt ### cert憑證生成兩種方式 **★PK沒有使用期限,若憑證過期,可使用原PK,再由上面方式生成。** 1. 自產.key和.csr(certificate signing request),將csr交由CA(Certificate Authority)機構產.crt檔。 2. 直接由CA 生成.key和.crt。 > 引用於 https://www.pkslow.com/archives/sslkey-knowledge-keytools #### keytool 指令參數說明 ![](https://i.imgur.com/puohiGN.png) ![](https://i.imgur.com/awm0SVm.png) > 引用 https://blog.csdn.net/HD243608836/article/details/109105540 > 引用 https://blog.csdn.net/dwyane__wade/article/details/80350548?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&utm_relevant_index=1 > 引用 https://ppfocus.com/0/di7323838.html > ★★★★★引用 https://codingnote.cc/zh-tw/p/105586/ > https://www.jianshu.com/p/9db57e761255 ### keystore詳細產生說明 https://geotrust.cloudmax.com.tw/guide/faq_keytool.asp ### KeyStore 和 TrustStore的區別 https://cloud.tencent.com/developer/article/1761787 ### HTTPS搭配Spring Boot中的 RestTemplate https://www.itread01.com/content/1544342959.html https://juejin.cn/post/6990322953766322206 --- keytool -export -alias server -keystore server.keystore -storepass 666666 -file server.crt keytool -import -alias server -file localhost.crt -keystore serverTruststore.jks ![](https://i.imgur.com/L2E5sBU.png) ``` # 生成一个密钥对 keytool -genkey -alias localhost -keyalg RSA -keysize 2048 -sigalg SHA256withRSA -keystore localhost.jks -dname CN=localhost,OU=Test,O=pkslow,L=Guangzhou,C=CN -validity 731 -storepass changeit -keypass changeit # 生成CSR文件 keytool -certreq -alias localhost -file localhost.csr -keystore localhost.jks -storepass changeit # 导出一个cert文件 keytool -export -alias xxx -file xxx.cer -keystore xxx.jks #导入一个cert文件 keytool -import -alias xxx -file xxx.cer -keystore xxx.jks # 查看cert列表详情 keytool -list -v -keystore xxx.p12 -storepass changeit -storetype PKCS12 keytool -list -v -keystore xxx.jks -storepass changeit -storetype JKS #转换JKS格式为P12 keytool -importkeystore -srckeystore clientKeystore.jks -destkeystore clientKeystore.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass 666666 -deststorepass 666666 -srckeypass 666666 -destkeypass 666666 -srcalias client -destalias client -noprompt ``` > 引用 https://www.pkslow.com/archives/springboot-ssl-basic # 問題點紀錄 ### 服務端提供的證書,無法從發出https方找到信任此證書憑證 ![](https://i.imgur.com/GNpFMPt.png) **解決辦法**:看發出方是誰決定,要將服務端憑證加入信任範圍 ### 發出https方收到來自服務端告知:您所帶的憑證是無效的,所以無法訪問服務端 ![](https://i.imgur.com/h9oeLxn.png) **解決辦法**:發出https方所攜帶的憑證,是否為服務端所信任的憑證 ## OpenSSL > https://www.gushiciku.cn/pl/pjap/zh-tw ![](https://i.imgur.com/1zFmmSN.png) > ★ https://code.yidas.com/tls-ssl-certificate-guide/ 生成.p12 openssl pkcs12 -export -in server.com.cer -inkey private.key -name server1 -out server.p12 -passout pass:123456 生成.jks keytool -importkeystore -srckeystore server.p12 -srcstoretype PKCS12 -srcstorepass 123456 -destkeystore server.jks -deststorepass 654321 openssl各參數說明 > https://blog.xueyuan.dev/post/self-certificate/ openssl產憑證順序 > https://docs.microsoft.com/zh-tw/azure/application-gateway/self-signed-certificates 動態去要憑證來看 openssl s_client -connect localhost:38080 -showcerts ``` openssl x509 -in HD_630045110001769.cer -inform der -text -noout openssl pkcs12 -in HD_630045110001769.pfx -info -nodes ```