Pergunta

Atualmente estou tendo um certificado auto-assinado para o meu HTTPS servidor web.

No meu programa java há uma SSLSocketFactory que irá criar um soquete para o servidor web. A implementação padrão de blocos de sol o certificado auto-assinado. Com uma própria implementação de um X509TrustManager só posso verificar se a data do certificado é válido.

Existe alguma possibilidade de deixar a implementação padrão verificar a validade (data e hostname, ...), e se ele falhar para mostrar uma caixa de diálogo para permitir que o usuário aceitar este certificado?

Cada código que eu encontrei até agora desativada somente a verificação SSL e aceito cada certificado inválido.

Foi útil?

Solução

Eu realmente não tenho tentei isso, mas por que você não pode implementar seu próprio gerenciador de confiança, que primeiros delegados para o gerente de confiança padrão para verificar se o certificado é válido e se não, pergunta ao usuário se ele ainda quer aceitar o certificado?


Você pode inicializar a maioria das classes de segurança com argumentos nulos para usar valores padrão. Para obter o gerenciador de confiança padrão, você deve obter os gerentes de confiança disponíveis e escolher o primeiro nas matrizes MGRS para implementar a interface X509TrustManager. Normalmente, a matriz conterá apenas um elment de qualquer maneira.

TrustManagerFactory trustmanagerfactory = 
     TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustmanagerfactory.init((KeyStore)null);
TrustManager[] mgrs = trustmanagerfactory.getTrustManagers();

Depois de ter embrulhado o gerente de confiança padrão com seu próprio ramal, você tem que inicializar um contexto SSL e obter uma fábrica tomada a partir dele:

SSLContext sslContext=SSLContext.getInstance("SSL","SunJSSE");
sslContext.init(null, new TrustManager[] {myTm}, null);
SSLSocketFactory sf = sslContext.getSocketFactory();

Em seguida, use esta fábrica de soquete para criar novos soquetes de cliente ou passá-lo para HttpsURLConnection.setDefaultSSLSocketFactory para usar o protocolo https em URLs com seu próprio gerenciador de confiança.

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