URL https nom d'hôte ne correspond pas à Nom Commun (CN) malgré la définition de "disableCNCheck" pour de vrai
J'ai réussi à configurer mon CXF base de client afin qu'il trouve le bon certificat SSL pour le serveur sur lequel je suis en cours d'exécution d'un service web:
<http:conduit name="https://myserver/myws/register/soap?wsdl:{http://glob.reg.com/myws}.http-conduit">
<http:tlsClientParameters>
<sec:keyManagers keyPassword="changeit">
<sec:keyStore type="JKS" password="changeit"
file="C:\Program Files (x86)\Java\jdk1.6.0_45\jre\lib\security\cacerts"/>
</sec:keyManagers>
<sec:trustManagers>
<sec:keyStore type="JKS" password="changeit"
file="C:\Program Files (x86)\Java\jdk1.6.0_45\jre\lib\security\cacerts"/>
</sec:trustManagers>
<sec:cipherSuitesFilter>
<!-- these filters ensure that a ciphersuite with
export-suitable or null encryption is used,
but exclude anonymous Diffie-Hellman key change as
this is vulnerable to man-in-the-middle attacks -->
<sec:include>.*_EXPORT_.*</sec:include>
<sec:include>.*_EXPORT1024_.*</sec:include>
<sec:include>.*_WITH_DES_.*</sec:include>
<sec:include>.*_WITH_AES_.*</sec:include>
<sec:include>.*_WITH_NULL_.*</sec:include>
<sec:exclude>.*_DH_anon_.*</sec:exclude>
</sec:cipherSuitesFilter>
</http:tlsClientParameters>
<http:authorization>
<sec:UserName>Betty</sec:UserName>
<sec:Password>password</sec:Password>
</http:authorization>
<http:client AutoRedirect="true" Connection="Keep-Alive"/>
</http:conduit>
Mais... parce que le certificat est un nom de sous-domaine différent de celui de ma machine du serveur (cartes de la même adresse IP), j'obtiens l'erreur suivante:
Caused by: java.io.IOException: The https URL hostname does not match the Common Name (CN) on the server certificate in the client's truststore. Make sure serv
er certificate is correct, or to disable this check (NOT recommended for production) set the CXF client TLS configuration property "disableCNCheck" to true.
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1234)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:183)
at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47)
at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1293)
... 18 more
Donc... puisque c'est un développement/système de test, je n'ai juste que le message proposé (ensemble de la CXF client TLS propriété de configuration "disableCNCheck" à true):
<http:tlsClientParameters disableCNCheck="true">
Plus, j'ai ajouté le code suivant à mon client principal de classe (et par la suggestion dans ce fil):
static {
HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier()
{
@Override
public boolean verify(String hostname, SSLSession session)
{
return true;
}
});
}
Mais... je reçois toujours le même message d'erreur:
Caused by: java.io.IOException: The https URL hostname does not match the Common Name (CN) on the server certificate in the client's truststore. Make sure serv
er certificate is correct, or to disable this check (NOT recommended for production) set the CXF client TLS configuration property "disableCNCheck" to true.
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.onFirstWrite(HTTPConduit.java:1234)
at org.apache.cxf.transport.http.URLConnectionHTTPConduit$URLConnectionWrappedOutputStream.onFirstWrite(URLConnectionHTTPConduit.java:183)
at org.apache.cxf.io.AbstractWrappedOutputStream.write(AbstractWrappedOutputStream.java:47)
at org.apache.cxf.io.AbstractThresholdOutputStream.write(AbstractThresholdOutputStream.java:69)
at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1293)
... 18 more
Aucune idée pourquoi?
Je veux dire, l'une des solutions ci-dessus doivent avoir été suffisamment pour que le client ignore le certificat URL incompatibilité mais, dans mon cas, ni les œuvres, ni la combinaison de ceux-ci.
Pourquoi?
OriginalL'auteur Withheld | 2014-01-14
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé CXF dans le cas de plusieurs
était suffisante pour désactiver CN vérifier.
Êtes-vous certain que votre client utilise le conduit de configuration? Ma compréhension est le nom de la conduite modèle doit correspondre à l'URI d'extrémité d'une certaine façon.
Essayez de définir le nom de la conduite comme suit telle que tout point de terminaison du match et voir si cela change quoi que ce soit:
Mise À Jour Le 2 Janvier 2015
Il s'avère que la
http-conduit
nom de la configuration correspondant a deux modèle de formats. L'un concerne le service de l'espace de noms et le nom du port. L'autre format pris en charge est une expression régulière en correspondance avec l'URL de point de terminaison spécifié dans WSDL utilisé pour créer un client.Citant Apache CXF Guide de l'Utilisateur concernant la
http-conduit
élément:OriginalL'auteur David J. Liszewski
Mettre
-Djsse.enableSNIExtension=false
dans votre appserver VM Options.J'ai essayé ceci dans mon projet (configuré le intelliJ maven coureur pour ajouter cet interrupteur) et cela ne fonctionne pas.
Cela ne fonctionne pas.
OriginalL'auteur Aliti
Ajouter le code ci-dessous pour définir disableCNCheck
Utilisez ce code uniquement dans la partie inférieure de l'environnement, Dans plus d'environnements, il n'est pas recommandé.
OriginalL'auteur Palla