Basic-Authentifizierung mit HTTPS

Ich bin versucht derzeit, den Zugriff auf eine URL mit HTTP-und HTTPS. Die URL, die ich versuche, auf die grundlegenden Authentifizierung erfordert. Mit HTTP funktioniert es einwandfrei, aber mit HTTPS nicht. Ich bin mir nicht sicher, ob ich etwas hinzufügen müssen anders mit HTTPS. Die URL soll zu mir zurück text, der in key-value-format, das ich laden kann, in eine Properties Objekt.

Hier ist der code, den ich bisher ausprobiert habe.

if (cpUrl.getProtocol().equals("https")) {
                        out.println("https", 0);
                        HttpsURLConnection connection = (HttpsURLConnection) cpUrl.openConnection();

                        TrustManager[] trustAllCerts = new TrustManager[] { new  BusinessIntelligenceX509TrustManager() };
                        SSLContext sc;

                        try {
                            sc = SSLContext.getInstance("SSL");
                        }
                        catch (NoSuchAlgorithmException noSuchAlgorithmException) {
                            return;
                        }

                        HostnameVerifier hv = new BusinessIntelligenceHostnameVerifier();

                        try {
                            sc.init(null, trustAllCerts, new java.security.SecureRandom());
                        }
                        catch (KeyManagementException keyManagementException) {

                            return;
                        }

                        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
                        HttpsURLConnection.setDefaultHostnameVerifier(hv);

                        connection.setDoInput(true);
                        connection.setRequestProperty("Authorization", "Basic " + encode);

                        connection.setRequestMethod("POST");
                        connection.connect();
                        stream = connection.getInputStream();
                        Properties properties = new Properties();
                        properties.load(stream);

                    }

Hier sind die Zertifikat-Klassen

   //HTTPS CERTIFICATE CLASSES
    class BusinessIntelligenceHostnameVerifier implements HostnameVerifier {

        public boolean verify(String arg0, SSLSession arg1) {
            return true;
        }

    }

    class BusinessIntelligenceX509TrustManager implements X509TrustManager {

        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
            //no-op
        }

        public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
            //no-op
        }

    }

Die Fehlermeldung, wenn ich entfernen Sie alle Gutschein-code (wie auch mit dem Zeugnis-code):

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:150)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1518)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:848)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:818)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1030)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1057)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1041)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:402)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:170)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:133)
    at com.tecsys.bi.install.BiInstall2ControlPanelPromptsProcessor.run(BiInstall2ControlPanelPromptsProcessor.java:117)
    at java.lang.Thread.run(Thread.java:595)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:221)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:145)
    at sun.security.validator.Validator.validate(Validator.java:203)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:172)
    at com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted(SSLContextImpl.java:320)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:841)
    ... 12 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:236)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:194)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:216)
    ... 17 more
  • Wo kommt dein code nicht? Scheitert es im Anschluss-setup im basic-Authentifizierung oder anderswo?
  • Es scheitert beim laden der Eigenschaften. Es sagt theres nichts. Obwohl es ist.
  • Auf einer anderen Anmerkung, die Umsetzung der Hostnamen verifier und trust-manager-Klassen in der Art und Weise gezeigt, ist überflüssig und unsicher. Wenn Ihr cacerts - Datei geladen wurde, werden mit den entsprechenden Zertifikaten, sollten nicht Sie haben ein problem mit der SSL - /TLS-setup-phase.
  • >', Lassen Sie mich wissen, wenn Sie brauchen, anythign anderes.' -- Die Fehlermeldung natürlich
  • Ich nehme an, du meintest diese Zeile - properties.load(stream);.
  • Reynolds ja.
  • Ich bin ein wenig verwirrt. Hat der server ein selbst signiertes Zertifikat? Oder ein cert, dessen root-CA nicht bekannt ist Java? Müssen Sie verwenden ein client-cert? Wenn keine der oben genannten, dann HTTPS sollte einfach funktionieren ... ohne benutzerdefinierte Codierung. Die Ausgabe der Basic-Authentifizierung werden sollte, orthogonal, denn das Zeug alles geschieht, nachdem die TLS-Verbindung wurde hergestellt.
  • Keines der oben genannten, ich denke, bevor ich ursprünglich kein Schein, code und es war das gleiche wie http, aber ich habe immer Ausnahme zu sagen, dass ich benötigt ein Zertifikat.
  • was passiert, wenn Sie besuchen Sie die URL in den browser? Nicht der browser zeigt den Inhalt der Eigenschaft? Außerdem haben Sie auch versucht dumping den Inhalt der Verbindung input-stream in das System.oder einen logger?
  • Reynolds, wenn ich Besuch-url in den browser, es fragt mich nach meinem Benutzernamen und Kennwort, und es funktioniert Prima.
  • Sorry, ich hätte mehr spezifisch. Dies ist die HTTPS-link, den ich meinte. Auch haben Sie bemerkt, jede HTTP-Umleitungen ausgestellt wird, nach der Anmeldung über den HTTPS-Kanal? Ich bin zu Ahnen, dass das zugrunde liegende Verhalten der server für HTTP und HTTPS, was in einer anderen Antwort für HTTPS.
  • Es gibt keine Umleitung.
  • greifen nach Strohhalmen jetzt. Ist die Codierung der Reaktion ISO-8859-1 im Falle von HTTPS? Properties Objekte geladen werden können-streams und-Dateien nur, wenn die Codierung ist die eine oben genannten.
  • Reynolds, ich habe einen Fehler gemacht, es schlägt fehl, wenn es versucht, sich zu verbinden. im sorry, ich dachte, es war etwas anderes.

InformationsquelleAutor RMT | 2011-06-09
Schreibe einen Kommentar