Pourquoi puis-je obtenir javax.net.le protocole ssl.SSLPeerUnverifiedException: peer authentifié pas seulement dans la production?

J'ai un grain 1.3.7 application qui fait un https api appel à un tiers à l'aide de l'apache HttpClient. La troisième partie de l'URL je suis heurter a un certificat valide. J'ai créer et exécuter ma demande comme suit:

HttpClient client = new DefaultHttpClient()

List<BasicNameValuePair> queryParams = new ArrayList<BasicNameValuePair>()
queryParams.add(new BasicNameValuePair("a_parameter", "a_parameter_value"))

URI uri = URIUtils.createURI("https", "third.party.address", 443, "/some/url/for/us", URLEncodedUtils.format(queryParams, "UTF-8"), null)
HttpGet httpGet = new HttpGet(uri)

try {
    log.debug "Sending request to ${uri}"
    return client.execute(httpGet)
} catch(HttpException e) {
    log.error "HttpException during location lookup request: ${e}"
    return
} catch(IOException e) {
    log.error "IOException during location lookup request: ${e}"
    return
}

Cela fonctionne très bien lorsque je suis en cours d'exécution de mon projet en dev mode. Je suis également en mesure d'appeler directement la même URL à partir de roulage et de mon navigateur avec aucun des erreurs. Cependant, une fois que mon projet est construit dans une guerre de fichier et le mettre sur un tomcat instance qui a un certificat/keystore définie, de sorte que les clients peuvent se connecter à l'aide de https, mes demandes de commencer à défaut avec le suivant IOException:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated

Je suis à essayer de comprendre le point de défaillance ici.

Pourquoi faire une requête https boucles ou mon dev mode différent que de faire une requête https à partir d'une https configuré instance de tomcat?

L'instance de tomcat n'est pas accessible au public, mais il n'y a pas de certificat de questions lorsque je me connecte à partir de mon navigateur (chrome, dit le cert est fine, comme une verbose demande curl).

Je ne suis pas un https/ssl expert par un effort, donc je suis à la recherche pour aider à expliquer ce qui est mal, pourquoi c'est mal, et comment je peux le résoudre. Je peux fournir toute autre information nécessaire.

---Mise à jour---
J'ai activé la javax.net.debug comme indiqué ci-dessous et de sortie inclus l'erreur suivante:

java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be\
 non-empty

Mes recherches sur google m'a fait penser que cette question c'est parce que je suis en utilisant java suivantes opter lors du démarrage de tomcat:

-Djavax.net.ssl.trustStore=/path/to/tomcat/conf/myStore.jks

Si cela est vrai, comment puis-je ajouter des choses dont j'avais besoin dans myStore.jks et de ne pas remplacer les valeurs par défaut si tout le monde est heureux?

  • Vous pouvez essayer de tourner sur SSL débogage avec le javax.net.debug bien - voir les herongyang.com/JDK/...
  • J'ai mis à jour le post avec le peu d'informations fournies par l'activation de cette.
InformationsquelleAutor twilbrand | 2012-04-05