Rozwiązywanie javax. net. ssl. SSLHandshakeException: sun.Ochrona.walidator.ValidatorException: Budowa ścieżki PKIX nie powiodła się błąd?

Edit: - próbowałem sformatować pytanie i akceptuję odpowiedź w bardziej reprezentacyjny sposób u mnie Blog

Oto oryginalny numer.

Dostaję ten błąd:

Szczegółowa wiadomość sun.Ochrona.walidator.ValidatorException: ścieżka PKIX budowa nie powiodła się:
słońce.Ochrona.dostawca.certpath.SunCertPathBuilderException: unable to znajdź prawidłową ścieżkę certyfikacji do żądanego celu

Cause javax. net. ssl. SSLHandshakeException: słońce.Ochrona.walidator.ValidatorException: budowanie ścieżki PKIX failed: sun.Ochrona.dostawca.certpath.SunCertPathBuilderException: nie można znaleźć prawidłowej ścieżki certyfikacji do żądanego celu

Używam Tomcat 6 jako serwera www. Mam dwie aplikacje internetowe HTTPS zainstalowane na różnych Tomcatach na różnych portach, ale na tym samym komputerze. Powiedz App1(port 8443) i App2(port 443). App1 łączy się z App2. Kiedy App1 łączy się z App2 otrzymuję powyżej błąd. Wiem, że jest to bardzo powszechny błąd, więc natknąłem się na wiele rozwiązań na różnych forach i stronach. Mam poniższy wpis w server.xml obu Tomcatów:

keystoreFile="c:/.keystore" 
keystorePass="changeit"

Każda strona mówi ten sam powód, dla którego certyfikat wydany przez app2 nie znajduje się w zaufanym sklepie app1 jvm. To wydaje się być prawdą również, gdy próbowałem trafić ten sam adres URL w przeglądarce IE, działa (z ociepleniem, jest problem z certyfikatem bezpieczeństwa tej strony internetowej. Tutaj mówię kontynuować na tej stronie). Ale kiedy to samo URL jest trafiony przez Klienta Java (w moim przypadku) dostaję powyższy błąd. Tak więc, aby umieścić go w truststore wypróbowałem te trzy opcje: {]}

Option1

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

Option2 Ustawienie poniżej w zmiennej środowiskowej

CATALINA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

Option3 Ustawienie poniżej w zmiennej środowiskowej

JAVA_OPTS -- param name
-Djavax.net.ssl.trustStore=C:\.keystore -Djavax.net.ssl.trustStorePassword=changeit ---param value

Ale nic nie działało .

W końcu udało się wykonać podejście Java zasugerowane w jak obsłużyć nieprawidłowy SSL certyfikaty z Apache HttpClient? by Pascal Thivent tzn. wykonując program InstallCert.

Ale to podejście jest dobre dla konfiguracji devbox, ale nie mogę go używać w środowisku produkcyjnym.

Zastanawiam się dlaczego trzy podejścia wymienione powyżej nie działają, gdy wspomniałem te same wartości w server.xml z serwera app2 i te same wartości w truststore ustawiając

System.setProperty("javax.net.ssl.trustStore", "C:/.keystore") and System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

W programie app1.

Aby uzyskać więcej informacji, jest to jak nawiązuję połączenie:

URL url = new URL(urlStr);

URLConnection conn = url.openConnection();

if (conn instanceof HttpsURLConnection) {

  HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();

  conn1.setHostnameVerifier(new HostnameVerifier() {
    public boolean verify(String hostname, SSLSession session) {
      return true;
    }
  });

  reply.load(conn1.getInputStream());
 470
Author: Glorfindel, 2012-03-08

25 answers

Musisz dodać certyfikat dla App2 do pliku truststore używanego JVM znajdującego się w %JAVA_HOME%\lib\security\cacerts.

Najpierw możesz sprawdzić, czy twój certyfikat jest już w truststore, uruchamiając następujące polecenie: keytool -list -keystore "%JAVA_HOME%/jre/lib/security/cacerts" (nie musisz podawać hasła)

Jeśli brakuje certyfikatu, możesz go pobrać za pomocą przeglądarki i dodać do truststore za pomocą następującego polecenia:

keytool -import -noprompt -trustcacerts -alias <AliasName> -file <certificate> -keystore <KeystoreFile> -storepass <Password>

Przykład:
keytool -import -noprompt -trustcacerts -alias myFancyAlias -file /path/to/my/cert/myCert.cer -keystore /path/to/my/jdk/jre/lib/security/cacerts/keystore.jks -storepass changeit

Po import możesz uruchomić pierwsze polecenie ponownie, aby sprawdzić, czy certyfikat został dodany.

Informacje o Sun/Oracle można znaleźć tutaj .

 437
Author: SimonSez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-10 09:30:40

Javax. net. ssl. SSLHandshakeException: sun.Ochrona.walidator.ValidatorException: nie powiodło się budowanie ścieżki PKIX: sun.Ochrona.dostawca.certpath.SunCertPathBuilderException: nie można znaleźć prawidłowej ścieżki certyfikacji do żądanego celu

• Kiedy pojawił się błąd, próbowałem wygooglować znaczenie wyrażenia i znalazłem ten problem, gdy serwer zmienia certyfikat SSL HTTPS, a nasza starsza wersja java nie rozpoznaje głównego urzędu certyfikacji CA).

* Jeśli możesz uzyskać dostęp do adresu URL HTTPS w przeglądarce, możliwe jest zaktualizowanie Java, aby rozpoznać główny CA.

• w przeglądarce przejdź do adresu URL HTTPS, do którego Java nie mogła uzyskać dostępu. Kliknij łańcuch certyfikatów HTTPS( w przeglądarce Internet Explorer znajduje się ikona kłódki), kliknij kłódkę, aby wyświetlić certyfikat.

* Przejdź do "Szczegóły" certyfikatu i "Kopiuj do pliku". Skopiuj w Base64 (.cer) format. Zostanie on zapisany na pulpicie.

• Zainstaluj certyfikat ignoruje wszystkie alerty.

* w ten sposób zebrałem informacje o certyfikacie adresu URL, do którego próbowałem uzyskać dostęp.

Teraz musiałem zrobić moją wersję Javy, aby wiedzieć o certyfikacie, aby dalej nie odmawiał rozpoznania adresu URL. W związku z tym muszę wspomnieć, że wygooglowałem, że informacje o certyfikacie głównym pozostają domyślnie w lokalizacji \jre\lib\security JDK, a domyślne hasło dostępu to: changeit.

To zobacz informacje o cacerts poniżej znajdują się procedury, które należy wykonać:

• Kliknij przycisk Start-- > Uruchom

• Typ cmd. Zostanie otwarty wiersz polecenia (może być konieczne otwarcie go jako administrator).

• Przejdź do katalogu Java/jreX/bin

• wpisz następujący

Keytool-list-keystore D:\Java\jdk1.5.0_12\jre\lib\security\cacerts

Podaje listę bieżących certyfikatów zawartych w keystore. Wygląda jak to:

C:\Documents and Settings\NeelanjanaG>keytool-list-keystore D:\Java\jdk1.5.0_12\jre\lib\security\cacerts

Wprowadź hasło keystore: changeit

Typ Keystore: jks

Keystore provider: SUN

Twój keystore zawiera 44 wpisy

Verisignclass3g2ca, Mar 26, 2004, trustedCertEntry,

Certyfikat odcisk palca (MD5): A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5c:E9

/ Align = "Right" / 9 Stycznia 2003, trustedCertEntry,

Certyfikat fingerprint (MD5): 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4

Thawtepersonalbasicca, Feb 13, 1999, trustedCertEntry,

Certyfikat odcisk palca (MD5): E6:0B:D2:C9:CA:2D:88:DB:1A:71:0E:4B: 78:EB:02: 41

Addtrustclass1ca, 1 maja 2006, trustedCertEntry,

Odcisk palca certyfikatu (MD5): 1E:42:95:02:33:92:6B:B9:5F:C0:7F:DA:D6:B2:4B: FC

Verisignclass2g3ca, Mar 26, 2004, trustedCertEntry,

Świadectwo fingerprint (MD5): F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4a:2b:F6

• teraz musiałem dołączyć wcześniej zainstalowany certyfikat do cacerts.

* w tym celu stosuje się następującą procedurę:

Keytool-import-noprompt-trustcacerts-alias ALIASNAME-file FILENAME_OF_THE_INSTALLED_CERTIFICATE-KEYSTORE PATH_TO_CACERTS_FILE-storepass PASSWORD

Jeśli używasz Javy 7:

Keytool –importcert-trustcacerts-alias ALIASNAME-file PATH_TO_FILENAME_OF_THE_INSTALLED_CERTIFICATE -keystore PATH_TO_CACERTS_FILE-storepass changeit

* następnie doda informacje o certyfikacie do pliku cacert.

Jest to rozwiązanie, które znalazłem dla wyżej wymienionego wyjątku!!

 190
Author: NDeveloper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Jak pracować-it w Tomcat 7

Chciałem obsługiwać certyfikat z własnym podpisem w aplikacji Tomcat, ale poniższy fragment nie zadziałał

import java.io.DataOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HTTPSPlayground {
    public static void main(String[] args) throws Exception {

        URL url = new URL("https:// ... .com");
        HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

        httpURLConnection.setRequestMethod("POST");
        httpURLConnection.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
        httpURLConnection.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(httpURLConnection.getOutputStream());

        String serializedMessage = "{}";
        wr.writeBytes(serializedMessage);
        wr.flush();
        wr.close();

        int responseCode = httpURLConnection.getResponseCode();
        System.out.println(responseCode);
    }
}

Oto co rozwiązało mój problem:

1) Pobierz plik .crt

echo -n | openssl s_client -connect <your domain>:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/<your domain>.crt
  • zastąp <your domain> swoją domeną (np. jossef.com)

2) Apply the .crt file in Java ' s cacerts certificate store

keytool -import -v -trustcacerts -alias <your domain> -file ~/<your domain>.crt -keystore <JAVA HOME>/jre/lib/security/cacerts -keypass changeit -storepass changeit
  • zastąp <your domain> swoją domeną (np. jossef.com)
  • zastąp <JAVA HOME> z Twoim katalogiem domowym java

3) Hack it

Mimo że iv'E zainstalował mój certyfikat w domyślnych sklepach certyfikatów Java, Tomcat ignoruje to (wygląda na to, że nie jest skonfigurowany do używania domyślnych sklepów certyfikatów Java).

Aby to zhakować, dodaj gdzieś w kodzie:

String certificatesTrustStorePath = "<JAVA HOME>/jre/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore", certificatesTrustStorePath);

// ...
 51
Author: Jossef Harush,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

W moim przypadku problem polegał na tym, że serwer WWW wysyłał tylko certyfikat i pośredni CA, a nie główny CA. Dodanie tej opcji JVM rozwiązało problem: -Dcom.sun.security.enableAIAcaIssuers=true

Dostępne jest wsparcie dla metody dostępu caIssuers dla rozszerzenia dostępu do informacji urzędu. Domyślnie jest wyłączona dla zgodności i może być włączona przez ustawienie właściwości systemowej com.sun.security.enableAIAcaIssuers na wartość true.

Jeśli jest ustawiona na true, implementacja PKIX firmy Sun CertPathBuilder używa informacje zawarte w rozszerzeniu AIA certyfikatu (oprócz określonych magazynów Certstore) w celu znalezienia wystawiającego certyfikat CA, pod warunkiem, że jest to URI typu ldap, http lub ftp.

Źródło

 11
Author: Guillaume,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-06-20 09:12:55

Innym powodem może być nieaktualna wersja JDK. Używałem wersji jdk 1.8.0_60, po prostu aktualizacja do najnowszej wersji rozwiązała problem z certyfikatem.

 9
Author: Ali Ismayilov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-23 13:18:38

Używając Tomcat 7 pod Linuksem, to załatwiło sprawę.

String certificatesTrustStorePath = "/etc/alternatives/jre/lib/security/cacerts";
System.setProperty("javax.net.ssl.trustStore", certificatesTrustStorePath);
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

Pod Linuksem, $JAVA_HOME nie zawsze jest konfiguracją, ale zazwyczaj /etc/alternatives/jre wskazuje na $JAVA_HOME/jre

 5
Author: Cedric Simon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-06 16:56:00

Używałem jdk1.8.0_171, gdy spotkałem się z tym samym problemem. Próbowałem najlepszych 2 rozwiązań tutaj (dodanie certyfikatu za pomocą keytool i inne rozwiązanie, które ma hack w nim), ale nie działa dla mnie.

Ulepszyłem moje JDK do {[1] } i zadziałało jak czar.
 5
Author: avp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-25 03:33:35

Mój plik cacerts był całkowicie pusty. Rozwiązałem to, kopiując plik cacerts z mojego komputera z systemem windows (który używa Oracle Java 7) i SCP ' d go do mojego Linux box (OpenJDK).

cd %JAVA_HOME%/jre/lib/security/
scp cacerts mylinuxmachin:/tmp

A następnie na maszynie linuksowej

cp /tmp/cacerts /etc/ssl/certs/java/cacerts
Do tej pory działało świetnie.
 4
Author: Ryan Shillington,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-26 20:03:52

Dla mnie ten błąd pojawił się również podczas próby połączenia z procesem za odwrotnym serwerem proxy NGINX, który obsługiwał SSL.

Okazało się, że problemem był certyfikat bez połączenia całego łańcucha certyfikatów. Kiedy dodałem certy pośrednie, problem został rozwiązany.

Mam nadzieję, że to pomoże.

 4
Author: YaDa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-23 14:20:23

Poniższy kod działa dla mnie:

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.X509TrustManager;

public class TrustAnyTrustManager implements X509TrustManager {

public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[] {};
}
}

HttpsURLConnection conn = null;
            URL url = new URL(serviceUrl);
            conn = (HttpsURLConnection) url.openConnection();
             SSLContext sc = SSLContext.getInstance("SSL");  
             sc.init(null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom());  

             conn.setSSLSocketFactory(sc.getSocketFactory());
 4
Author: Sandip S.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-11 04:29:20

Napisałem mały skrypt win32 (WinXP 32bit testet), który wyszukuje wszystkie wersje Javy w plikach programu i dodaje do nich cert. Hasło musi być domyślnym "changeit" lub zmienić je samodzielnie w skrypcie: -)

@echo off

for /F  %%d in ('dir /B %ProgramFiles%\java') do (
    %ProgramFiles%\Java\%%d\bin\keytool.exe -import -noprompt -trustcacerts -file some-exported-cert-saved-as.crt -keystore %ProgramFiles%\Java\%%d\lib\security\cacerts -storepass changeit
)

pause
 2
Author: mons droid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-06 15:32:33

Dla mnie nie zadziałało rozwiązanie z tego postu: https://stackoverflow.com/a/9619478/4507034 .

Zamiast tego udało mi się rozwiązać problem, importując certyfikację do mojej maszyny zaufane certyfikaty.

Kroki:

  1. przejdź do adresu URL (np. https://localhost:8443/yourpath), gdy certyfikacja nie działa.
  2. Wyeksportuj certyfikację zgodnie z opisem we wspomnianym poście.
  3. na komputerze z systemem windows otwórz: Manage computer certificates
  4. przejdź do Trusted Root Certification Authorities -> Certificates
  5. Importuj tutaj swój plik your_certification_name.cer.
 2
Author: Radu Linu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-28 11:03:57

Rozwiązanie wdrożeniowe (Alpine Linux)

Aby móc rozwiązać ten problem w naszych środowiskach aplikacji, przygotowaliśmy następujące polecenia terminala Linuksa:

cd ~

Wygeneruje plik cert w katalogu domowym.

apk add openssl

To polecenie instaluje openssl w alpine Linux. Możesz znaleźć odpowiednie polecenia dla innych dystrybucji Linuksa.

openssl s_client -connect <host-dns-ssl-belongs> < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > public.crt

Wygenerowano potrzebny plik cert.

sudo $JAVA_HOME/bin/keytool -import -alias server_name -keystore $JAVA_HOME/lib/security/cacerts -file public.crt -storepass changeit -noprompt

Zastosował wygenerowany plik do JRE za pomocą programu "keytool"

Uwaga: proszę zastąpić DNS <host-dns-ssl-belongs>

Uwaga 2: należy pamiętać, że -noprompt nie wyświetli komunikatu weryfikacyjnego (tak/nie), a parametr -storepass changeit wyłączy monit o hasło i poda potrzebne hasło(domyślnie jest to 'changeit'). Te dwie właściwości pozwolą Ci używać tych skryptów w środowiskach aplikacji, takich jak budowanie obrazu dokera.

Note3 Jeśli wdrażasz aplikację za pomocą Dockera, możesz wygenerować tajny plik raz i umieścić go w plikach projektu aplikacji. Nie będziesz musiał generować go ponownie i ponownie.

 2
Author: Bahadir Tasdemir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-02-10 10:38:23

To wydaje się równie dobre miejsce, jak każde inne, aby udokumentować inną możliwą przyczynę niesławnego Komunikatu o błędzie PKIX. Po spędzeniu zbyt długiego czasu na przeglądaniu zawartości keystore i truststore oraz różnych konfiguracji instalacji Javy zdałem sobie sprawę, że mój problem został rozwiązany... literówka.

Literówka oznaczała, że używałem keystore jako truststore. Ponieważ moja firma Root CA nie była zdefiniowana jako samodzielny cert w keystore, a jedynie jako część łańcucha cert i nie została zdefiniowana nigdzie else (tj. cacerts) ciągle dostaję błąd PKIX.

Po nieudanym wydaniu (to jest config prod, gdzie indziej było ok) i dwóch dniach drapania głowy w końcu zobaczyłem literówkę i teraz wszystko jest dobrze.

Mam nadzieję, że to komuś pomoże.

 2
Author: Dave Richardson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-05-19 15:29:07

Dla MacOS X poniżej jest dokładne polecenie działa dla mnie, gdzie musiałem spróbować z podwójnym hypen w opcji 'importcert', który działał:

sudo keytool -–importcert -file /PathTo/YourCertFileDownloadedFromBrowserLockIcon.crt -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_191.jdk/Contents/Home/jre/lib/security/cacerts -alias "Cert" -storepass changeit
 1
Author: Abhishek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-05-13 09:58:23

Aby dowiedzieć się, która Java jest używana, użyj polecenia "ps-ef | grep tomcat":

Próbka:

/home/mcp01$ **ps -ef |grep tomcat**
tomcat7  28477     1  0 10:59 ?        00:00:18 **/usr/local/java/jdk1.7.0_15/bin/java** -Djava.util.logging.config.file=/var/lib/tomcat7/conf/logging.properties -Djava.awt.headless=true -Xmx512m -XX:+UseConcMarkSweepGC -Djava.net.preferIPv4Stack=true -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/share/tomcat7/endorsed -classpath /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar -Dcatalina.base=/var/lib/tomcat7 -Dcatalina.home=/usr/share/tomcat7 -Djava.io.tmpdir=/tmp/tomcat7-tomcat7-tmp org.apache.catalina.startup.Bootstrap start
1005     28567 28131  0 11:34 pts/1    00:00:00 grep --color=auto tomcat

Następnie możemy przejść do: cd / usr / local/java / jdk1.7.0_15 / jre / lib / security

Domyślnie plik cacerts znajduje się tutaj. Włóż do niego niezaufany certyfikat.

 0
Author: oraclesoon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-21 08:22:13

Ja też mam ten problem.

Próbowałem prawie wszystkiego, dodając certyfikat SSL do .keystore, ale nie działał z Java1_6_x. Dla mnie pomogło, jeśli zaczniemy używać nowszej wersji Java, Java1_8_x jako JVM.

 0
Author: Nubian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 14:24:56

Dla bezpieczeństwa nie powinniśmy używać certyfikatów podpisanych własnoręcznie w naszej implementacji. Jednak jeśli chodzi o rozwój, często musimy korzystać ze środowisk próbnych, które otrzymały własnoręcznie podpisane certy. Próbowałem rozwiązać ten problem programowo w moim kodzie i nie udało mi się. Jednak dodając cert do JRE trust-store naprawiłem mój problem. Proszę znaleźć poniżej kroki,

  1. Pobierz cert strony,

  2. Skopiuj certyfikat (np. plik cert_file.cer) do katalogu $JAVA_HOME\Jre \ Lib\Security

  3. Otwórz CMD w administratorze i zmień katalog na $JAVA_HOME\Jre \ Lib \ Security

  4. Zaimportuj certyfikat do magazynu zaufania używając poniższego polecenia

Keytool-import-alias ca-file cert_file.cer - keystore cacerts - storepass changeit

Jeśli masz błąd jeśli keytool nie jest rozpoznawalny, proszę odnieść się do tego.

Typ tak jak poniżej

Zaufaj temu certyfikatowi: [tak]

  1. Teraz spróbuj uruchomić kod lub uzyskać dostęp do adresu URL programowo za pomocą Javy.

Update

Jeśli twoim serwerem aplikacji jest jboss spróbuj dodać poniżej właściwość systemową

System.setProperty("org.jboss.security.ignoreHttpsHost","true");
Mam nadzieję, że to pomoże!
 0
Author: tk_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-06 02:05:34

Chcę się włączyć, ponieważ mam środowisko QEMU, w którym muszę pobierać pliki w Javie. Okazuje się, że /etc/ssl/certs/java/cacerts W QEMU ma problem, ponieważ nie pasuje do /etc/ssl/certs/java/cacerts w środowisku hosta. Środowisko hosta znajduje się za firmowym proxy, więc Java cacerts jest dostosowaną wersją.

Jeśli używasz środowiska QEMU, upewnij się, że system hosta ma dostęp do plików jako pierwszy. Na przykład możesz wypróbować Ten skrypt na komputerze hosta, aby najpierw zobaczyć. Jeśli skrypt działa po prostu dobrze w maszynie hosta, ale nie w QEMU, wtedy masz ten sam problem co ja.

Aby rozwiązać ten problem, musiałem zrobić kopię zapasową oryginalnego pliku w QEMU, skopiować plik w środowisku hosta do QEMU chroot jail, a następnie java mogła pobierać pliki normalnie w QEMU.

Lepszym rozwiązaniem byłoby zamontowanie /etc w środowisku QEMU; nie jestem jednak pewien, czy inne pliki będą miały wpływ na ten proces. Więc postanowiłem użyć tego brzydkiego, ale łatwego obejście.

 0
Author: Rock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-30 06:05:02

Moje dwa grosze: W moim przypadku cacerts nie był folderem, ale plikiem, a także był prezentowany na dwóch ścieżkach Po odkryciu go, błąd zniknął po skopiowaniu .plik jks.

# locate cacerts    
/usr/java/jdk1.8.0_221-amd64/jre/lib/security/cacerts
/usr/java/jre1.8.0_221-amd64/lib/security/cacerts

Po ich kopii zapasowej, kopiuję .JKS over.

cp /path_of_jks_file/file.jks /usr/java/jdk1.8.0_221-amd64/jre/lib/security/cacerts
cp /path_of_jks_file/file.jks /usr/java/jre1.8.0_221-amd64/lib/security/cacerts

Uwaga: ta podstawowa sztuczka rozwiązuje ten błąd w projekcie Genexus, pomimo pliku.jks też jest na serwerze.plik XML programu Tomcat.

 0
Author: Sergio Alonso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-03 13:46:43
  • Upewnij się o lokalizacji JVM. Może być pół tuzina JREs na Twój system. Którego naprawdę używa Twój Tomcat? Anywhere inside kod uruchomiony w Twoim Tomcacie, napisz println (System.getProperty ("java.domu")). Zwróć uwagę na to miejsce. W Plik/lib/security/cacerts są certyfikatami używanymi przez Twój Kocur.
  • Znajdź Błąd certyfikatu głównego. Może to być znalezione przez włączenie debugowania SSL przy użyciu-Djavax. net. debug=all. Run your aplikacja i notatka z konsoli SSL loguje CA, który zawodzi. Jego url będzie dostępny. W moim przypadku byłem zaskoczony, że proxy zscaler był tym, który zawodził, ponieważ faktycznie proxy Moje połączenia i zwracanie własnego certyfikatu CA.
  • Wklej adres url w przeglądarce. Certyfikat otrzyma ściągnięty.
  • Importuj ten certyfikat do cacertów używając keytool import.
 0
Author: Apurva Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-04 01:23:08

Napotkałem ten problem podczas wykonywania połączeń REST z mojego serwera aplikacji działającego w AWS EC2. Poniższe kroki rozwiązały problem dla mnie.

  1. curl-vs https://your_rest_path
  2. echo / openssl s_client-connect your_domain: 443
  3. sudo apt-get install ca-certificates

Curl-vs https://your_rest_path teraz zadziała!

 0
Author: milfar dean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-14 17:32:57

Miałem ten problem z Android Studio, gdy byłem za proxy. Używałem Crashlytics, który próbuje przesłać plik mapowania podczas budowania.

Dodałem brakujący certyfikat proxy do truststore znajdującego się na /Users/[username]/Documents/Android Studio.app/Contents/jre/jdk/Contents/Home/jre/lib/security/cacerts

Z następującym poleceniem: keytool -import -trustcacerts -keystore cacerts -storepass [password] -noprompt -alias [alias] -file [my_certificate_location]

Na przykład z domyślnym hasłem truststore keytool -import -trustcacerts -keystore cacerts -storepass changeit -noprompt -alias myproxycert -file /Users/myname/Downloads/MyProxy.crt

 -1
Author: Wirling,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-08 08:08:12

Mały hack. Zaktualizuj adres URL w pliku " hudson.model.UpdateCenter.xml " z https na http

<?xml version='1.1' encoding='UTF-8'?>
<sites>
  <site>
    <id>default</id>
    <url>http://updates.jenkins.io/update-center.json</url>
  </site>
</sites>
 -1
Author: Harshavardhan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-30 15:09:55

Dodaj to do swojego kodu:

TrustManager[] trustAllCerts = new TrustManager[]{
           new X509TrustManager() {
               @Override
               public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                   return new X509Certificate[0];
               }

               @Override
               public void checkClientTrusted(
                       java.security.cert.X509Certificate[] certs, String authType) {
               }

               @Override
               public void checkServerTrusted(
                       java.security.cert.X509Certificate[] certs, String authType) {
               }
           }
       };

       try {
           SSLContext sc = SSLContext.getInstance("SSL");
           sc.init(null, trustAllCerts, new java.security.SecureRandom());
           HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
       } catch (GeneralSecurityException e) {
       }
 -2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-17 19:06:08