Javaで、最初は信頼するCA証明書がないhttpsクライアントを作成したい。JVMでデフォルトのcacertsファイルを使用したくないので、空の信頼ストアを作成する必要があります。そしてそれをJVMに向けます。
空のトラストストアを作成するにはどうすればよいですか?
私が見つけた1つの可能な解決策は、keytool import
を使用して新しく作成されたトラストストアにランダムな証明書をインポートし、インポートされた証明書をそこから削除することです。これにより、空のキー/トラストストアが残ります。残念ながら、JVMは空のトラストストアに満足しておらず、例外をスローします。したがって、目標を達成するために、無効または期限切れの証明書が存在する可能性のある証明書が少なくとも1つ存在する必要があります。
誰かが最終的にここに再び到達した場合:
public static void main (String[] args) {
String storePassword = "storePassword";
String storeName = "emptyStore.jks";
String storeType = "jks";
try (FileOutputStream fileOutputStream = new FileOutputStream(storeName)) {
KeyStore keystore = KeyStore.getInstance(storeType);
keystore.load(null, storePassword.toCharArray());
keystore.store(fileOutputStream, storePassword.toCharArray());
} catch (CertificateException | NoSuchAlgorithmException | IOException | KeyStoreException e) {
e.printStackTrace();
}
次に、keytoolでコンテンツを確認します。
$ keytool -list -keystore emptyStore.jks -storepass storePassword
Keystore type: JKS
Keystore provider: Sun
Your keystore contains 0 entries
Keytoolを使用して、ランダムなキーペアを作成します。
keytool -genkeypair -alias boguscert -storepass storePassword -keypass secretPassword -keystore emptyStore.keystore -dname "CN=Developer, OU=Department, O=Company, L=City, ST=State, C=CA"
その後、それを削除します
keytool -delete -alias boguscert -storepass storePassword -keystore emptyStore.keystore
その内容を確認します。
$ keytool -list -keystore emptyStore.keystore -storepass storePassword
Keystore type: JKS
Keystore provider: Sun
Your keystore contains 0 entries
KeyStore::load
にnull引数を渡して、空のキーストアを作成できます。 https://docs.Oracle.com/javase/8/docs/api/Java/security/KeyStore.html#load-Java.io.InputStream-char:A- を参照してください。