---
# System prepended metadata

title: SSL keytool 各參數說明

---

# 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
```


