Założyłem sobie konto w banku (kolejne konto, w kolejnym banku). Dostałem dwa pliki, jeden jest certyfikatem, drugi kluczem prywatnym. Należy je połączyć w jedno. Teoretycznie wszystko jest proste, wystarczy wejść na odpowiednią stronę, wskazać pliki, wpisać hasło i...
O tym jak Java skłoniła mnie do użycia OpenSSL
...i nic. A dlaczego? Bo mam zbyt nową Javę (JRE). A miało być tak pięknie. Przenośna między platformami, przenośna między systemami. Napisz raz, uruchamiaj wszędzie. Od dawna wiem, że to nie prawda, ale dzisiaj puściły mi nerwy. Nie będę do tak prostej czynności instalował starą wersję oprogramowania. Zamiast tego sięgnąłem po stary, dobry OpenSSL.
Certyfikat miał rozszerzenie DER, co sugerowało, że właśnie w ten sposób certyfikat został zakodowany (Distinguished Encoding Rules). Po bliższym przyglądnięciu się, okazało się jednak, że to jest zwykły PEM. OpenSSL oczywiście nie ma problemu z tymi formatami, ale na początku niepotrzebnie upierałem się, by traktować ten certyfikat jako DER poprzez -inform DER. Aby było zabawniej klucz prywatny był zakodowany według standardu PKCS#8 w DER.
Skoro wiadomo co i jak jest zapisane, pora przekształcić te dwa pliki w jeden plik PKCS#12.. A robi się to mniej więcej tak:
openssl pkcs8 -in <klucz_prywatny> -inform DER > private.pem openssl pkcs12 -in <certyfikat> -inkey private.pem -export -out <plik.pfx> del private.pem
W trakcie tej operacji należy podać oczywiście stosowne hasła. Plik private.pem w zasadzie należałoby nie tyle usunąć, co wymazać z dysku, ponieważ znajdował się w nim klucz prywatny w formie jawnej, nie chronionej przez żadne hasło.
...i w ten prosty sposób obyłem się bez Javy...