Nossas conexões TLS são intermediadas por proxy por uma middlebox. Eu tenho a cadeia de confiança do certificado da CA interna de nossa organização. Posso usar o keytool para importar esses certificados para os armazenamentos de chaves JDK e JRE nos locais padrão, e o aplicativo Java que estamos usando pode validar certificados que ele recebe do proxy muito bem.
No entanto, quando a TI envia atualizações Java, elas, por alguma razão desconhecida, não incluem seus próprios certificados CA da middlebox nos keystores Java da atualização Java que são enviados a todas as estações de trabalho dos usuários. Em seguida, seremos interrompidos até que reimportemos manualmente os certificados de CA da middlebox de nossa organização nos keystores de Java de cada estação de trabalho que usamos. E nunca sabemos quando a TI irá enviar uma atualização do Java. Ugh.
Então, eu gostaria de usar um keystore personalizado em um local conhecido e fixo. Isso leva a algumas perguntas.
Quando tento importar um dos certificados para um keystore inicialmente inexistente, o keytool comete erros dizendo que o keystore não existe. Sim, eu sei disso. Como posso usar o keytool para criar um keystore vazio?
Depois de criar o armazenamento de chaves inicialmente vazio e importar os certificados da CA para ele, existe o problema de fazer com que o Java use nosso armazenamento de chaves personalizado. O aplicativo Java que usamos é iniciado assim:
java -jar argumento someJavaApp.jar argument1 2 ...
Como posso dizer ao Java que eu quero que ele use o keystore no meu local personalizado em vez do keystore no local padrão?