Pergunta

Eu estou tentando ativar a comunicação SSL a partir de um cliente de serviço Web (Axis2) usando o certificado no cartão CAC do usuário. Funciona como um encanto .... até que o servidor web é CAC habilitado. Nesse ponto, a conexão SSL é rejeitada com a mensagem de erro que os outros certificados na cadeia não foram incluídos.

eu ter garantido que o provedor está disponível, adicionando-lo para o arquivo security.properties ou criá-lo através de programação.

Minha abordagem atual é definir as propriedades do sistema: System.setProperty ( "javax.net.ssl.keyStore", "NONE"); System.setProperty ( "javax.net.ssl.keyStoreType", "PKCS11");

Eu entendo de este pergunta / resposta que esta abordagem só envia o certificado "entidade final". Aparentemente eu preciso para implementar minha própria X509KeyManager. Esta é a terra nova para mim, alguém pode sugerir uma referência boa ou fornecer amostras de como fazê-lo?

Agradecemos a assistência.

Foi útil?

Solução

A melhor implementação do gerente depende do emitente dos certificados que você espera de ser utilizado.

Se o certificado no CAC do usuário irá sempre ser emitido por uma CA específica, simplesmente armazenar que o certificado do emissor e quaisquer certificados intermediários mais acima na cadeia em um arquivo PKCS # 7. Na getCertificateChain() método, esta coleção pode ser anexado às cegas para o certificado do usuário e voltou.

Se as coisas não são assim tão simples, mas uma completa lista de possíveis emissores podem ser enumerados, obter todos os seus certificados, e seus certificados do emissor, e assim por diante, até os certificados de raiz .

Adicione todos os certificados de raiz para um armazenamento de chaves como entradas confiáveis. Bundle os certificados intermediários em um # arquivo 7-format PKCS-.

X509KeyManager ( ou estender X509ExtendedKeyManager se você' re trabalhando com SSLEngine). Especificamente, no método getCertificateChain(), você vai usar um CertPathBuilder para criar uma cadeia válida a partir do certificado do usuário para uma raiz confiável. O alvo é o certificado que você carregar a partir CAC do usuário com o parâmetro alias. O confiável raízes são os certificados no armazenamento de confiança que você criou; os certificados intermediários pode ser carregado a partir do arquivo PKCS # 7 e adicionado com os parâmetros do construtor. uma vez que a corrente é construída, obter o caminho do certificado e convertê-lo para uma matriz. Este é o resultado do método getCertificateChain().

Se você não pode prever quem estará emitindo o certificado do usuário, você pode ser capaz de obter os certificados intermediários em tempo de execução de um diretório LDAP ou outro repositório. Isso é um novo nível de dificuldade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top