2016-04-14 17 views
0

Ich versuche, die API-Management-REST-API auszuführen, um die Liste der APIs zu erhalten. https://<service>.management.azure-api.net/apis?api-version=2014-02-14 Beim Ausführen über den Browser bekomme ich die Ausgabe richtig, aber wenn ich versuche, über Java-Code auszuführen, gibt es folgenden Fehler.API-Management-REST-API funktioniert nicht

Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target 

Ich habe die API Management Services auch aktiviert. Ich führe folgenden Code aus.

HttpsURLConnection con = null; 
con = createConnection(url, proxyDetails); 
con.setRequestMethod("GET"); 
con.addRequestProperty("Authorization", <Token>); 
con.getResponseCode() 

Beim Abrufen des Antwortcodes erhalte ich den oben genannten Fehler.

Kann mir bitte jemand mitteilen, warum ich den Zertifizierungsfehler erhalte, da ich kein Dokument gefunden habe, in dem erwähnt wird, dass wir ein Zertifikat verwenden müssen, um API Management Service zu nutzen?

Muss ich eine andere Konfiguration vornehmen, außer das Kontrollkästchen API Management Service im Sicherheitsbereich von verwalten zu aktivieren?

+0

Der '' korrekte Inhalt für die 'Authorization' Eigenschaft ist" 'Bearer ' ". Vermisst du den "Träger"? –

+0

Die Authentifizierung für die API-Verwaltung verwendet "SharedAccessSignature -------". Laut Dokument heißt es, diesen Token so zu benutzen wie er ist. Also habe ich den "Bearer" nicht benutzt. –

+0

Versucht mit Bearer auch, immer noch dasselbe –

Antwort

0

Werfen Sie einen Blick auf diesen SO-Beiträgen: Resolving javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed Error?

Das Problem ist, dass das SSL-Server-Zertifikat von API-Management REST-Dienst wird von Ihrem Java-Client nicht richtig erkannt. Möglicherweise ist ein Keystore-Fehler in der Zertifikatautorität?

Öffnen Sie die URL im Browser, überprüfen Sie das SSL-Serverzertifikat, und überprüfen Sie die Zertifikatskette, um die Zertifizierungsstelle (CA) zu sehen, die das Serverzertifikat ausgestellt hat. Überprüfen Sie, ob sich diese Zertifizierungsstelle in Ihrem Java-Keystore befindet.

+0

Um die API-Management-REST-API zu verwenden, um die Metrikdaten zu erhalten, müssen wir das Zertifikat hochladen? Da ich das Client-Zertifikat auf der Registerkarte "Client-Zertifikate" auf der Registerkarte "Sicherheit" des API Management-Publisher-Portals hochgeladen habe. Und ich benutze das gleiche Zertifikat? Selbst während ich die HttpUrlConnection erstelle, benutze ich nicht, um SSLConnectionFactory zu setzen. Bin mir nicht sicher. Kannst du mir bitte irgendeine andere Einrichtung mitteilen, die ich tun muss? –

+0

Hierbei handelt es sich nicht um Clientzertifikate, die von der API-Verwaltung für die Verbindung mit Back-End-Systemen verwendet werden. Dies ist Java-Code, der eine Verbindung zu einem https-Server herstellt, und der Server gibt ein Serverzertifikat zurück. Der Java-Code kann dieses Serverzertifikat nicht mit einer vertrauenswürdigen Zertifizierungsstelle verknüpfen. –

0

Ich möchte das Problem reproduzieren, aber fehlgeschlagen.

Hier ist mein Code unten. Gemäß the doc for API Management REST API Get a list of all APIs ist es nicht notwendig, den Authorization Header für die /apis Anfrage zu setzen.

URL url = new URL("https://<my-apimgmt-service-name>.management.azure-api.net/apis?api-version=2014-02-14"); 
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection(); 
conn.setRequestMethod("GET"); 
conn.connect(); 
int respCode = conn.getResponseCode(); 
System.out.println(respCode); 

bekam ich den Statuscode 200. Ich denke, das Problem könnte durch Ihre Funktion createConnection(url, proxyDetails) verursacht werden. Wenn Sie den Code teilen könnten, könnte er uns helfen, das Problem zu analysieren.

Jede Sorge, bitte zögern Sie nicht, lassen Sie es mich wissen.