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 celuCause 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());
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 .
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!!
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);
// ...
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.
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.
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
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.
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.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.
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());
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
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:
- przejdź do adresu URL (np.
https://localhost:8443/yourpath
), gdy certyfikacja nie działa. - Wyeksportuj certyfikację zgodnie z opisem we wspomnianym poście.
- na komputerze z systemem windows otwórz:
Manage computer certificates
- przejdź do
Trusted Root Certification Authorities
->Certificates
- Importuj tutaj swój plik
your_certification_name.cer
.
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.
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.
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
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.
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.
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,
-
Pobierz cert strony,
-
Skopiuj certyfikat (np. plik cert_file.cer) do katalogu $JAVA_HOME\Jre \ Lib\Security
-
Otwórz CMD w administratorze i zmień katalog na $JAVA_HOME\Jre \ Lib \ Security
-
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]
- 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!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.
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.
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.
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.
- curl-vs https://your_rest_path
- echo / openssl s_client-connect your_domain: 443
- sudo apt-get install ca-certificates
Curl-vs https://your_rest_path teraz zadziała!
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
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>
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) {
}