Importa certificato come PrivateKeyEntry

Sto installando SSL su un server Tomcat e sto seguendo queste istruzioni dall’emittente https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO16181 e afferma:

Verify the following information: The SSL certificate is imported into the alias with the "Entry Type" of PrivateKeyEntry or KeyEntry. If not, please import the certificate into the Private Key alias. 

Quando importare il certificato (tomcat) sto usando:

 keytool -import -trustcacerts -alias your_alias_name -keystore your_keystore_filename -file your_certificate_filename 

ma quando lo faccio importa come trustCertEntry

 Keystore type: JKS Keystore provider: SUN Your keystore contains 3 entries primaryca, Jul 26, 2014, trustedCertEntry, Certificate fingerprint (SHA1):  tomcat, Jul 26, 2014, trustedCertEntry, Certificate fingerprint (SHA1):  secondaryca, Jul 26, 2014, trustedCertEntry, Certificate fingerprint (SHA1):  

Come posso importare alias tomcat come PrivateKeyEntry?

Sbarazzarsi dell’opzione -trustcacerts . Non è un certificato CA. È il tuo certificato. E usa lo stesso alias che aveva già la chiave privata.

Queste linee guida CA sono un po ‘fuorvianti. @EJP ha giustamente detto che non dovresti usare -trustcacerts per il tuo certificato.

Inoltre, questo documento CA suggerisce di importare i certificati CA primari e intermedi in operazioni separate, che dovrebbero fornire un risultato simile a questo:

 primaryca, Jul 26, 2014, trustedCertEntry, Certificate fingerprint (SHA1):  secondaryca, Jul 26, 2014, trustedCertEntry, Certificate fingerprint (SHA1):  tomcat, Jul 26, 2014, PrivateKeyEntry, Certificate fingerprint (SHA1):  

Sfortunatamente, importare i certificati CA nel tuo keystore come questo è inutile. (Sarebbe utile in un truststore , ma la CA che stai utilizzando è probabilmente già nel truststore predefinito).

È utile avere i certificati CA per il proprio certificato nel keystore , per presentare una catena di certificati completa quando sono richiesti certificati intermedi. Tuttavia, il keymanager (a meno che non si tratti di un’implementazione personalizzata) non costruirà la catena per conto dell’utente, anche se troverà certificati CA idonei accanto al certificato di End-Entity (in PrivateKeyEntry).

È necessario importare tali certificati insieme , come una catena, contro la voce in cui si trova la chiave privata. Per fare ciò, concatenare i certificati insieme in un file di testo (codificato PEM), prima il cert del server, seguito dal certificato utilizzato per emetterlo e così via. Quindi, importa quel file nel tuo keystore usando l’alias della chiave privata. (Questo è esattamente lo stesso problema di questa domanda , ma con un certificato del server.)

(Non sono sicuro che la CA fornisca già il tuo cert come catena, ma in generale, ottieni almeno la tua cert solo in un file e la CA intermedia in un’altra. Il documento a cui ti colleghi sembra fuorviante perché non menzionare più di un blocco tra --BEGIN/END CERT-- , eppure in qualche modo il loro screenshot di esempio ha una lunghezza di certificato di 4 contro quel singolo alias.)

Come @jww ha sottolineato in un commento sulla tua domanda, non hai bisogno del certificato CA “root” (quello autofirmato) in questa catena, dal momento che il tuo cliente si fida già di esso, o non ha motivo di fidati quando lo mandi. Non è sbagliato averlo nella catena, ma è inutile, e potrebbe aggiungere un po ‘di overhead di rete.

Si tenta di aggiungere un certificato e si aspetta che sia la chiave privata – la sua confusione tra due cose diverse.

Generalmente, quando crei keystore (.jks), include la chiave privata all’interno. Se è vuoto (eliminato), è necessario generare un pacchetto (file .p12) dalla chiave e dai certificati.

Per creare una nuova chiave e un certificato gratuiti è ansible utilizzare questa implementazione di openSSl https://zerossl.com .

Quindi, hai una chiave e un certificato che dovresti generare (.p12) file di bundle da loro: (su macchina Linux)

 openssl pkcs12 -export -in [filename-certificate] -inkey [filename-key] -name [host] -out [filename-new-PKCS-12.p12] 

Ora basta aggiungere il file bundle (file .p12) a un keystore (.jks) eseguendo il seguente comando:

 keytool -importkeystore -deststorepass [password] -destkeystore [filename-new-keystore.jks] -srckeystore [filename-new-PKCS-12.p12] -srcstoretype PKCS12