証明書のロード

keystoreの形式がバイナリでさっぱり読めないので気に食わない
pemなら読めるだろうし、鍵の長さを極端に短くすれば埋め込め易いだろうし

openssl genrsa 512 > ~/host.pem
openssl req -new -x509 -nodes -days 3650 -key ~/host.pem > ~/host.cert
openssl pkcs8 -in ~/host.pem -topk8 -nocrypt -outform DER -out ~/host.pk8

genrsaは32ビットまで下げれるのにcert作るときに512ビットないと怒られるみたい、、、ケチ
有効期限をめちゃめちゃ長くしようおもたら100年越えたあたりからブラウザには19xx年とか言われた、どーでもええねん適当証明にそんなん、無期限とかさしてくれや


んで、pemとcertで動かそうと思ったらpemよめへんってどういうこと??
PKCS#8しか読み込めへんって・・・

KeyStore store = KeyStore.getInstance(KeyStore.getDefaultType());
store.load(null, null);

FileInputStream pem = new FileInputStream("~/host.pk8");
byte input[] = new byte[pem.available()];
pem.read(input, 0, input.length);
pem.close();
PrivateKey key = KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(input));

CertificateFactory factory = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) factory.generateCertificate(new FileInputStream("~/host.cert"));
store.setKeyEntry("private", key, "123456".toCharArray(), new Certificate[] {cert});

PKCS#8をbase64して埋め込むのが手っ取り早いか
つか、それならいっそkeystoreをbase64したってもよかった、クソ