使用Let's Encrypt證書籤名服務建立Java Keystore(.jks)
阿新 • • 發佈:2018-11-02
安裝certbot
sudo apt-get install software-properties-common
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
sudo apt-get install certbot
建立keys並獲取證書
certbot certonly --standalone -d coderock.cn -d www.coderock.cn --email [email protected].com
建立包含完整證書鏈和私鑰的PKCS12檔案
進入生成的證書目錄(如/etc/letsencrypt/live/coderock.cn
openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out pkcs.p12 -name NAME
上面的-name
選項相當於jks裡面的alias,可以隨便命名,不過要保證跟下面的命令一致。
命令執行後會要求輸入一個密碼,類似於jks中的keystore password。
將PKCS12檔案轉化為Keystore檔案
keytool -importkeystore -deststorepass PASSWORD_STORE -destkeypass PASSWORD_KEYPASS -destkeystore keystore.jks -srckeystore pkcs.p12 -srcstoretype PKCS12 -srcstorepass STORE_PASS -alias NAME
上面的STORE_PASS和NAME跟上一步對應。PASSWORD_STORE和PASSWORD_KEYPASS是要生成的Keystore的keystore密碼和key密碼,可以隨意給定。
在Netty中使用生成的Keystore
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("/etc/letsencrypt/live/coderock.cn/keystore.jks" ), "password".toCharArray());
KeyManagerFactory kms = KeyManagerFactory.getInstance("SunX509");
kms.init(ks, "password".toCharArray());
SslContext sslCtx = SslContextBuilder.forServer(kms).clientAuth(ClientAuth.NONE).build();