Sto provando a utilizzare un certificato PEM (X.509) (memorizzato in un file privateKey.pem sul disco) per firmare i messaggi inviati tramite socket in Java, ma sto avendo molti problemi a trovare un esempio così vicino. Normalmente sono un ragazzo C++ che sta solo intervenendo per aiutare in questo progetto, quindi è stato un po 'difficile per me mettere tutto insieme in un codice che funzioni quando non ho familiarità con le API.Utilizzo di una chiave privata codificata PEM codificata per firmare un messaggio in modo nativo
Sfortunatamente, sono limitato ai metodi che vengono forniti standard con Java (1.6.0 Aggiornamento 16), quindi sebbene abbia trovato un esempio simile usando BouncyCastle di PEMReader, non ha aiutato molto questo particolare progetto.
chiavemio privateKey.pem è passphrase protetta, sotto forma di: utilizzare
-----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-----
Essi chiave è stato generato OpenSSL:
openssl.exe genrsa -out private_key.pem 4096
non sono in grado di convertire questo tasto per un DER o altro formato prima del runtime, tutte le conversioni necessarie dovranno essere eseguite internamente nel codice, in quanto la chiave deve essere facilmente sostituibile e il formato rimarrà PEM.
Ho sentito un mix di cose di cui non sono completamente sicuro e speravo che le menti collettive qui in SO potessero aiutare a mettere insieme i pezzi.
Ho sentito dire che il certificato PEM necessita Base64 Decodificato per convertirlo in un certificato DER che può essere utilizzato. Ho uno strumento di decodifica Base64 chiamato MiGBase64 ma non sono completamente sicuro di come/quando questa decodifica deve essere eseguita.
Mi sono perso nei documenti API Java cercando di rintracciare i 15 diversi tipi di chiavi, KeyStores, KeyGenerator, certificati, ecc che esistono, ma non ho familiarità con nessuno di loro per identificare correttamente che devo usare e come usarli insieme.
L'algoritmo di base sembra abbastanza semplice, è per questo che è stato particolarmente frustrante che non sono stato in grado di scrivere un altrettanto semplice implementazione:
1) Leggere il privateKey.pem da file
2) Caricare la chiave privata in classe XXX, utilizzando la passphrase per decifrare la chiave
3) utilizzare l'oggetto chiave con la classe firma per firmare il messaggio
Aiuto di questa, espec codice di esempio, è molto apprezzato. Ho faticato a trovare utili esempi per questo problema, in quanto molti esempi "vicini" generano nuove chiavi, utilizzando BouncyCastle o semplicemente utilizzando forme diverse di chiavi/classi non applicabili qui.
Questo sembra un problema davvero semplice ma mi sta facendo impazzire, qualche risposta davvero semplice?
Grazie per il tempo e lo sforzo che è andato in vostra risposta. Ho dovuto apportare alcune modifiche per farlo funzionare con le mie chiavi, ma tu sei il leader. Molto apprezzato! – KevenK
@KevenK Buono a sapersi. Quali modifiche erano necessarie? – Kevin