Это пост-памятка по созданию приватных и публичных ключей, сертификатов и подписей, а так же по работе с java keystore.
Предположим, что есть некий soap service который использует wsse (WS-Security, wss) для безопасности. Для того, чтобы в Java выполнять шифрование и подписи необходимо подготовить Java Key Store (JKS) файл.
Создание и импорт
Для начала создаем приватный ключ.
1 2 3 |
openssl genrsa -out key.pem |
Далее нужен самоподписанный сертифика. По сути это публичный ключ.
1 2 3 |
openssl req -new -x509 -key key.pem -out cert.der -days 365 -outform DER |
Теперь можно создать авторизационный сертификат. Обычно его отправляют в сервис и в ответ получают публичный сертификат сервиса.
1 2 3 |
openssl req -new -key key.pem -out cert.csr -outform DER |
Теперь, когда у нас есть key.pem нужно поменять его формат
1 2 3 |
openssl pkcs8 -topk8 -nocrypt -in key.pem -inform PEM -out key.der -outform DER |
И в конечном итоге создать keystore с заполненными ключами.
1 2 3 |
java ImportKey key.der cert.der importkey |
Стоит отметить, что keystore создаст alias и password равные importkey если они не указаны.
Экпорт
Что делать, если спустя неокторое время оригинаьные ключи используемые в java keystore потерялись и надо их извлечь?
Для начала достанем публичный сертификат с помощью keytool.
1 2 3 4 |
keytool -export -alias importkey -keystore mystorage.jks -file exported-der.crt openssl x509 -out exported-pem.crt -outform pem -in exported-der.crt -inform der |
Теперь публичный серт. в файле exported-pem.crt.
Чтобы достать приватный ключ придется воспользоваться утилитой написанной на java.
1 2 3 4 5 6 |
svn checkout http://java-exportpriv.googlecode.com/svn/trunk/ java-exportpriv-read-only cd java-exportpriv-read-only javac ExportPriv.java Base64Coder.java java ExportPriv mystorage.jks importkey importkey > exported-pkcs8.key |
В результате в файле exported-pkcs8.key лежит приватный ключ.