Próbuję użyć certyfikatu PEM (X.509) (przechowywanego w pliku privateKey.pem na dysku) do podpisywania wiadomości wysyłanych przez gniazda w języku Java, ale mam dużo problemów ze znalezieniem przykładu, który jest blisko. Zwykle jestem facetem w C++, który właśnie wkracza do pomocy przy tym projekcie, więc było mi trochę trudniej złożyć to wszystko razem w kod, który działa, gdy nie jestem zaznajomiony z interfejsami API.Używanie zakodowanego, zaszyfrowanego klucza prywatnego PEM do podpisania wiadomości natywnie
Niestety, jestem ograniczony do metod, które są standardowo w Javie (1.6.0 Aktualizacja 16), więc chociaż znalazłem podobny przykład przy użyciu PEMReader, to nie pomogło wiele w tym konkretnym projekcie.
kluczMy privateKey.pem jest hasło chronione, w postaci:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED DEK-Info:
DES-EDE3-CBC,63A862F284B1280B
[...]
tsjQI4H8lhOBuk+NelHu7h2+uqbBQzwkPoA8IqbPXUz+B/MAGhoTGl4AKPjfm9gu
OqEorRU2vGiSaUPgDaRhdPKK0stxMxbByUi8xQ2156d/Ipk2IPLSEZDXONrB/4O5
[...]
-----END RSA PRIVATE KEY-----
one klucz został wygenerowany przy użyciu OpenSSL:
openssl.exe genrsa -out private_key.pem 4096
jestem w stanie przekształcić ten klucz do DER lub inny format przed uruchomieniem, wszelkie niezbędne konwersje będą musiały być wykonane wewnętrznie w kodzie, ponieważ klucz musi być łatwo wymienny, a format pozostanie PEM.
Słyszałem mieszankę rzeczy, których nie jestem do końca pewny, i miałem nadzieję, że zbiorowe umysły tutaj w SO mogą pomóc zebrać kawałki razem.
Słyszałem, że powiedział, że certyfikat PEM wymaga dekodowania Base64 w celu przekształcenia go w certyfikat DER, który może być używany. Mam narzędzie dekodowania Base64 o nazwie MiGBase64, ale nie jestem całkowicie pewny, jak/kiedy to dekodowanie wymaga.
Zgubiłem się w dokumentach API Java próbujących wyśledzić 15 różnych rodzajów kluczy, kluczyków, kluczowych generatorów, certyfikatów itp., Ale nie jestem dostatecznie zaznajomiony z żadnym z nich, aby prawidłowo zidentyfikować których muszę używać i jak z nich korzystać.
Algorytm podstawowy wydaje się dość prosta, dlatego został on szczególnie frustrujące, że nie byłem w stanie napisać równie prosty realizacji:
1) Przeczytaj privateKey.pem z pliku
2) Załaduj prywatny klucz do klasy XXX, stosując hasło dostępu do odszyfrowania klucza
3) za pomocą klucza obiektu z klasą podpis do podpisania wiadomości
w tym pomóc, Espec przykładowy kod jest bardzo doceniany. Starałem się znaleźć użyteczne przykłady tego problemu, ponieważ większość "zamkniętych" przykładów generuje nowe klucze, używając BouncyCastle, lub po prostu używa innych form kluczy/klas, które nie mają tutaj zastosowania.
To wydaje się być naprawdę prostym problemem, ale doprowadza mnie to do szału, czy naprawdę proste odpowiedzi?
Dzięki za czas i wysiłek, który poszedł do swojej odpowiedzi. Musiałem wprowadzić kilka modyfikacji, aby działało to z moimi kluczami, ale ty prowadzisz. Bardzo doceniane! – KevenK
@KevenK Dobrze słyszeć. Jakie modyfikacje były konieczne? – Kevin