1. 程式人生 > >使用Let's Encrypt證書籤名服務建立Java Keystore(.jks)

使用Let's Encrypt證書籤名服務建立Java Keystore(.jks)

安裝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();