# SSL keytool 各參數說明
<!--  -->
## 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://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

```
# 生成一个密钥对
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方收到來自服務端告知:您所帶的憑證是無效的,所以無法訪問服務端

**解決辦法**:發出https方所攜帶的憑證,是否為服務端所信任的憑證
## OpenSSL
> https://www.gushiciku.cn/pl/pjap/zh-tw

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