私は自分のJavaプロジェクトに Twitter4j libraryを使ってつぶやくことを試みています。初回実行時に、証明書Sun.security.validator.ValidatorException
およびSun.security.provider.certpath.SunCertPathBuilderException
に関するエラーが発生しました。それから私はTwitterの証明書を追加しました:
C:\Program Files\Java\jdk1.7.0_45\jre\lib\security>keytool -importcert -trustcacerts -file PathToCert -alias ca_alias -keystore "C:\Program Files\Java\jdk1.7.0_45\jre\lib\security\cacerts"
しかし成功せずに。これがTwitterを取得する手順です。
public static void main(String[] args) throws TwitterException {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true)
.setOAuthConsumerKey("myConsumerKey")
.setOAuthConsumerSecret("myConsumerSecret")
.setOAuthAccessToken("myAccessToken")
.setOAuthAccessTokenSecret("myAccessTokenSecret");
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
try {
Query query = new Query("iphone");
QueryResult result;
result = Twitter.search(query);
System.out.println("Total amount of tweets: " + result.getTweets().size());
List<Status> tweets = result.getTweets();
for (Status Tweet : tweets) {
System.out.println("@" + Tweet.getUser().getScreenName() + " : " + Tweet.getText());
}
} catch (TwitterException te) {
te.printStackTrace();
System.out.println("Failed to search tweets: " + te.getMessage());
}
そして、これがエラーです。
Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Relevant discussions can be found on the Internet at:
http://www.google.co.jp/search?q=d35baff5 or
http://www.google.co.jp/search?q=1446302e
TwitterException{exceptionCode=[d35baff5-1446302e 43208640-747fd158 43208640-747fd158 43208640-747fd158], statusCode=-1, message=null, code=-1, retryAfter=-1, rateLimitStatus=null, version=3.0.5}
at Twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.Java:177)
at Twitter4j.internal.http.HttpClientWrapper.request(HttpClientWrapper.Java:61)
at Twitter4j.internal.http.HttpClientWrapper.get(HttpClientWrapper.Java:81)
at Twitter4j.TwitterImpl.get(TwitterImpl.Java:1929)
at Twitter4j.TwitterImpl.search(TwitterImpl.Java:306)
at jku.cc.servlets.TweetsAnalyzer.main(TweetsAnalyzer.Java:38)
Caused by: 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 Sun.security.ssl.Alerts.getSSLException(Unknown Source)
at Sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
at Sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at Sun.security.ssl.Handshaker.fatalSE(Unknown Source)
at Sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
at Sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
at Sun.security.ssl.Handshaker.processLoop(Unknown Source)
at Sun.security.ssl.Handshaker.process_record(Unknown Source)
at Sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
at Sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at Sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at Sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at Sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at Sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at Sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at Java.net.HttpURLConnection.getResponseCode(Unknown Source)
at Sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(Unknown Source)
at Twitter4j.internal.http.HttpResponseImpl.<init>(HttpResponseImpl.Java:34)
at Twitter4j.internal.http.HttpClientImpl.request(HttpClientImpl.Java:141)
... 5 more
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(Unknown Source)
at Sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
at Sun.security.validator.Validator.validate(Unknown Source)
at Sun.security.ssl.X509TrustManagerImpl.validate(Unknown Source)
at Sun.security.ssl.X509TrustManagerImpl.checkTrusted(Unknown Source)
at Sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
... 20 more
Caused by: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at Sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
at Java.security.cert.CertPathBuilder.build(Unknown Source)
... 26 more
Failed to search tweets: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
あなたのFirefoxブラウザのURLに行き、(URLアドレスの隣の)HTTPS証明書チェーンをクリックしてください。 "more info" > "security" > "show certificate" > "details" > "export.."
をクリックしてください。名前をピックアップして、ファイルタイプexample.cerを選択します。キーストア付きのファイルがあり、それをJVMに追加する必要があります。
Cacertsファイルの場所を決めます。 C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts.
次に、コマンドラインでexample.cer
ファイルをcacertsにインポートします。
keytool -import -alias example -keystore C:\Program Files (x86)\Java\jre1.6.0_22\lib\security\cacerts -file example.cer
あなたはデフォルトのchangeit
であるパスワードを尋ねられるでしょう
JVM/PCを再起動してください。
出典: http://magicmonster.com/kb/prg/Java/ssl/pkix_path_building_failed.html
私のJava 6インストールを新しいTwitter証明書で動作させるために証明書ファイルを作成しようとした何時間もの後、私はついにメッセージボードのコメントに埋め込まれた信じられないほど単純な解決策を見つけました。 Java 7インストールからcacertsファイルをコピーして、Java 6インストール内のファイルを上書きするだけです。最初にcacertsファイルのバックアップを作成することをお勧めしますが、それから新しいファイルをコピーしてBOOMしてください。それだけでうまくいきます。
実際にWindowsのcacertsファイルをLinuxのインストールにコピーしたところ、うまくいった。
このファイルは、新旧両方のJava jdkインストールでjre/lib/security/cacerts
にあります。
これが他の誰かの悪化の時間を節約することを願っています。
私がこの問題に遭遇したのですが、特に自動証明書は、公式の証明書とは異なり、かなりトリッキーで、Javaはそれほど好きではありません。
次のリンクを確認してください。 Javaの証明書に関する問題を解決します
基本的に、サーバーからの証明書をJava Home証明書に追加する必要があります。
InstallCert
のJavaソースコードをダウンロードし、サーバーの実行中に実行します。引数server[:port]
を指定します。元のパスワードはJava証明書に対して有効なので( "changeit")、パスワードは必要ありません。jssecerts
ファイルを作成できるようにします作業ディレクトリ(Run -> Configurations
)。$Java_HOME/jre/lib/security
にコピーしますこれらの手順を実行した後、証明書との接続によってJava内で例外が発生することはなくなります。
次のソースコードは重要であり、それは(Sun)Oracleのブログ、それが提供されたリンク上にあることがわかった唯一のページから消えました、それで私は参考のために答えにそれを添付しています。
/*
* Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Sun Microsystems nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* Originally from:
* http://blogs.Sun.com/andreas/resource/InstallCert.Java
* Use:
* Java InstallCert hostname
* Example:
*% Java InstallCert ecc.Fedora.redhat.com
*/
import javax.net.ssl.*;
import Java.io.*;
import Java.security.KeyStore;
import Java.security.MessageDigest;
import Java.security.cert.CertificateException;
import Java.security.cert.X509Certificate;
/**
* Class used to add the server's certificate to the KeyStore
* with your trusted certificates.
*/
public class InstallCert {
public static void main(String[] args) throws Exception {
String Host;
int port;
char[] passphrase;
if ((args.length == 1) || (args.length == 2)) {
String[] c = args[0].split(":");
Host = c[0];
port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
String p = (args.length == 1) ? "changeit" : args[1];
passphrase = p.toCharArray();
} else {
System.out.println("Usage: Java InstallCert [:port] [passphrase]");
return;
}
File file = new File("jssecacerts");
if (file.isFile() == false) {
char SEP = File.separatorChar;
File dir = new File(System.getProperty("Java.home") + SEP
+ "lib" + SEP + "security");
file = new File(dir, "jssecacerts");
if (file.isFile() == false) {
file = new File(dir, "cacerts");
}
}
System.out.println("Loading KeyStore " + file + "...");
InputStream in = new FileInputStream(file);
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, passphrase);
in.close();
SSLContext context = SSLContext.getInstance("TLS");
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager) tmf.getTrustManagers()[0];
SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
context.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory factory = context.getSocketFactory();
System.out.println("Opening connection to " + Host + ":" + port + "...");
SSLSocket socket = (SSLSocket) factory.createSocket(Host, port);
socket.setSoTimeout(10000);
try {
System.out.println("Starting SSL handshake...");
socket.startHandshake();
socket.close();
System.out.println();
System.out.println("No errors, certificate is already trusted");
} catch (SSLException e) {
System.out.println();
e.printStackTrace(System.out);
}
X509Certificate[] chain = tm.chain;
if (chain == null) {
System.out.println("Could not obtain server certificate chain");
return;
}
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
System.out.println();
System.out.println("Server sent " + chain.length + " certificate(s):");
System.out.println();
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
MessageDigest md5 = MessageDigest.getInstance("MD5");
for (int i = 0; i < chain.length; i++) {
X509Certificate cert = chain[i];
System.out.println
(" " + (i + 1) + " Subject " + cert.getSubjectDN());
System.out.println(" Issuer " + cert.getIssuerDN());
sha1.update(cert.getEncoded());
System.out.println(" sha1 " + toHexString(sha1.digest()));
md5.update(cert.getEncoded());
System.out.println(" md5 " + toHexString(md5.digest()));
System.out.println();
}
System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
String line = reader.readLine().trim();
int k;
try {
k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
} catch (NumberFormatException e) {
System.out.println("KeyStore not changed");
return;
}
X509Certificate cert = chain[k];
String alias = Host + "-" + (k + 1);
ks.setCertificateEntry(alias, cert);
OutputStream out = new FileOutputStream("jssecacerts");
ks.store(out, passphrase);
out.close();
System.out.println();
System.out.println(cert);
System.out.println();
System.out.println
("Added certificate to keystore 'jssecacerts' using alias '"
+ alias + "'");
}
private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
private static String toHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder(bytes.length * 3);
for (int b : bytes) {
b &= 0xff;
sb.append(HEXDIGITS[b >> 4]);
sb.append(HEXDIGITS[b & 15]);
sb.append(' ');
}
return sb.toString();
}
private static class SavingTrustManager implements X509TrustManager {
private final X509TrustManager tm;
private X509Certificate[] chain;
SavingTrustManager(X509TrustManager tm) {
this.tm = tm;
}
public X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
throw new UnsupportedOperationException();
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
this.chain = chain;
tm.checkServerTrusted(chain, authType);
}
}
}
私のUIアプローチ:
CMDライン:
私のシステムにJDKとJRE 1.8.0_112の両方が存在していたのですが、状況が少し異なりました。
既知のコマンドを使用して、新しいCA証明書を[JDK_FOLDER]\jre\lib\security\cacerts
にインポートしました。
keytool -import -trustcacerts -keystore cacerts -alias <new_ca_alias> -file <path_to_ca_cert_file>
それでも、私は同じ PKIXパス構築に失敗し続けました error。
Java -Djavax.net.debug=all ... > debug.log
を使用して、デバッグ情報をJava CLIに追加しました。 debug.logファイルでは、 trustStoreで始まる行は次のとおりです。 実際には[JRE_FOLDER]\lib\security\cacerts
にあるcacertsストアを指しています。
私の場合の解決策は、JREで使用されているファイルの上にJDKで使用されているcacertsファイル(新しいCAが追加されている)をコピーすることでした。
ターゲットURLをブラウザにロードし、サイトの証明書(通常はロック記号の付いたアイコンでアクセスできます。ブラウザのアドレスバーの左側または右側にあります)の有効期限が切れているかどうかにかかわらず、.
新しいバージョンには通常、更新された信頼できる証明書のセットが付属しています。
また可能であれば、古いバージョンをアンインストールします。これは誤設定エラーを明白にするでしょう。
最新のもの以外のJDKの下で開発している場合 - @ jeremy-goodellが彼の answer で示唆しているように、%Java_HOME%/jre/lib/security/cacerts
ファイルを最新のインストール済みJREの新しいものと交換します
上記の方法で問題が解決しない場合は、keytool
を使用して証明書をJavaのキーストアに保存してください。
keytool -trustcacerts -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit -importcert -alias <alias_name> -file <path_to_crt_file>
@MagGGGが彼の answer で示唆しているように、証明書付きのファイルはブラウザから取得できます。
注1:あなたはあなたのサイトの証明書へのチェーン内のすべての証明書についてこれを繰り返す必要があるかもしれません。根本から始めなさい。
注意2:<alias_name>
はストア内のキーの中で一意である必要があります。そうしないとkeytool
がエラーを表示します。
ストア内のすべての証明書のリストを取得するには、実行します。
keytool -list -trustcacerts -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit
問題が発生した場合は、ストアから証明書を削除するのに役立ちます。
keytool -delete -alias <alias_name> -keystore "%Java_HOME%jre\lib\security\cacerts" -storepass changeit
Smtp.gmail.comの証明書をインポートしたい
解決策は私にとって唯一の解決策です[1]。この証明書を表示するためのコマンドを入力してください
D:\ openssl\bin\openssl.exe s_client -connect smtp.gmail.com:465
「----- BEGIN CERTIFICATE -----」と「----- END CERTIFICATE -----」の間の行をコピーして、ファイルgmail.cerに保存します。
実行する
keytool -import -alias smtp.gmail.com -keystore "%Java_HOME%/ jre/lib/security/cacerts" -file C:\ Users\Admin\Desktop\gmail.cer
パスワードを入力してください chageit
[はい]をクリックして証明書をインポートします
Javaを再起動します
今コマンドを実行し、あなたが行ってもいいです
問題の背景:
プロジェクトでNetbeans IDE clean and build optionを使用してmvn clean installを実行しようとすると、次のようなエラーが表示されていました。 IDE /コマンドプロンプトを介して、しかしブラウザを介してファイルをダウンロードすることができます。
エラー :
Caused by: org.Eclipse.aether.transfer.ArtifactTransferException: Could not transfer artifact com.Java.project:product:jar:1.0.32 from/to repo-local (https://url/local-repo): Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
解決策:
1.問題のURLの証明書をダウンロードします。
2.キーストアをインストールして問題を解決します。
C:¥Program Files¥Java¥jdk1.8.0_141¥jre¥bin> keytool -importcert -file "C:/user/sheldon/desktop/product.cer" - エイリアス製品-keystore [.____。 "C:/ Program Files/Java/jdk1.8.0_141/jre/lib/security/cacerts"。
サンプルコマンドラインコマンド/出力:
keytool -importcert -file "C:/Users/sheldon/Desktop/product.cer" -alias product -keystore "C:/Program iles/Java/jdk1.8.0_141/jre/lib/security/cacerts"
Enter keystore password:
Trust this certificate? [no]: yes
Certificate was added to keystore
これはTwitter固有の回答ではありませんが、このエラーを検索するときに出てくる質問です。 Webブラウザーで表示したときに有効な証明書があるように見えるWebサイトに接続するときにシステムがこのエラーを受け取っている場合、おそらくそのウェブサイトには不完全な証明書チェーンがあります。
問題の簡単な要約:認証局は、ルート証明書を使用して古い証明書だけに署名することはありません。代わりに、(通常)認証局フラグも設定されている(つまり、証明書への署名が許可されている) intermediate 証明書に署名します。次に、CAから証明書を購入すると、これらの中間証明書のいずれかでCSRに署名します。
Javaトラストストアには、ルート証明書のみがあり、中間証明書はありません。
誤って設定されたサイトは、署名済み証明書 just を返す場合があります。問題:トラストストアにない中間証明書で署名されました。ブラウザは、キャッシュされた中間証明書をダウンロードまたは使用することでこの問題を処理します。これにより、Webサイトの互換性が最大化されます。ただし、JavaおよびOpenSSLなどのツールはサポートしません。そして、それは問題のエラーを引き起こします。
Qualys SSL Test を使用して、この疑いを確認できます。あなたがサイトに対してそれを実行し、それが言うなら
このサーバーの証明書チェーンは不完全です。
それはそれを確認します。認定パスを見て、 Extra Download というテキストを見ると、これを確認することもできます。
修正方法:サーバー管理者は、中間証明書も返すようにWebサーバーを構成する必要があります。たとえば、Comodoの場合は、.ca-bundle
ファイルが便利です。たとえば、mod_sslを使用したApache構成では、SSLCertificateChainFile
構成設定を使用します。 nginxの場合、中間証明書と署名済み証明書を連結し、SSL証明書構成で使用する必要があります。詳細については、「不完全な証明書チェーン」をオンラインで検索してください。
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
証明書の検証をジャンプするために使用されます。
その理由は、上記のエラーは、JDKが多くの信頼できる認証局(CA)証明書と一緒に「cacerts」というファイルにまとめられていることですが、このファイルには自己署名証明書の手がかりがありません。つまり、cacertsファイルには自己署名証明書がインポートされていないため、信頼できるエンティティとして扱われていないため、上記のエラーが発生します。
上記のエラーを修正するには、自己署名証明書をcacertsファイルにインポートするだけです。
まず、cacertsファイルを見つけます。 JDKの場所を見つける必要があります。 EclipseやIntelliJ IdeaなどのIDEを使用してアプリケーションを実行している場合は、プロジェクト設定に移動してJDKの場所を確認してください。たとえばMac OSの場合、cacertsファイルの一般的な場所はこの場所です。 /ライブラリ/ Java/JavaVirtualMachines/{{JDK_version}} /目次/ホーム/ jre/lib/security Windowsのマシンでは{{Installation_directory}}/{{JDK_version}}/jre/libにあります。 /セキュリティ
Cacertsファイルを見つけたら、次に自己署名証明書をこのcacertsファイルにインポートする必要があります。自己署名証明書を正しく生成する方法がわからない場合は、最後の記事を確認してください。
証明書ファイル(.crt)がなく、単に.jksファイルがある場合は、以下のコマンドを使用して.crtファイルを生成できます。すでに.crt/.pemファイルがある場合は、以下のコマンドを無視できます。
##キーストア(.jksファイル)から証明書を生成するには####
keytool -export -keystore keystore.jks -alias selfsigned -file selfsigned.crt
上記の手順でselfsigned.crtというファイルが生成されます。証明書をcacertsにインポートします。
keytool -importcert -file selfsigned.crt -alias selfsigned -keystore {{cacerts path}}
例えば
keytool -importcert -file selfsigned.nextgen.crt -alias selfsigned.nextgen -keystore /Library/Java/JavaVirtualMachines/jdk1.8.0_171.jdk/Contents/Home/jre/lib/security/cacerts
それだけで、アプリケーションを再起動すればうまくいきます。それでもうまくいかず、SSLハンドシェイク例外が発生する場合。おそらく証明書に登録されている別のドメインを使用しているということです。
私は彼らのアップデートサイトを介してEclipseにCucumber-Eclipseプラグインをインストールしようとしているときにこの質問に出会いました。同じSunCertPathBuilderExceptionエラーが発生しました。
Unable to read repository at http://cucumber.io/cucumber-Eclipse/update-site/content.xml.
Unable to read repository at http://cucumber.io/cucumber-Eclipse/update-site/content.xml.
Sun.security.validator.ValidatorException: PKIX path building failed:
Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
他の答えのいくつかはこの質問の与えられた状況にふさわしく、役立つものですが、それでも私の問題には役に立たず誤解を招くものでした。
私の場合、問題は、アップデートサイトに提供されているURLが次のとおりであることです。
しかし、ブラウザ経由でナビゲートすると、(追加された " .github "に注意してください):
そのため、Eclipseで更新サイトを追加するときに、リダイレクトされたバージョンの更新サイトURLを使用することが解決策となります。
cacerts
を追加してもうまくいきませんでした。フラグ-Djavax.net.debug=all
を指定してlogを有効にした後、jssecacerts
からJavaの読み取りを知るようになりました。
jssecacerts
へのインポートはついにうまくいきました。
私の場合は、証明書エラーが発生しました。これは、フィドラーをバックグラウンドで実行していたために証明書がめちゃくちゃになったためです。プロキシとして機能しますので、それを閉じてEclipseを再起動してください。
あなたがatlassianソフトウェアexで上記のエラーを持っているとき。ジラ
2018-08-18 11:35:00,312 Caesium-1-4 WARN anonymous Default Mail Handler [c.a.mail.incoming.mailfetcherservice] Default Mail Handler[10001]: javax.mail.MessagingException: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target while connecting to Host 'imap.xyz.pl' as user '[email protected]' via protocol 'imaps, caused by: 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
信頼できるキーストアに証明書を追加できます(missing_caを適切な証明書名に変更します)。
keytool -importcert -file missing_ca.crt -alias missing_ca -keystore /opt/atlassian/jira/jre/lib/security/cacerts
パスワードを要求されたらchangeit
を入力し、y
を確認します
その後、単にjiraを再起動してください。
これは解決策ですが、この問題に関する私の話の形です:
上記のすべての解決策を試みて(3日間)死にかけていましたが、何もうまくいきませんでした。
私はすべての希望を失いました。
私がプロキシの背後にいて、彼らが最近セキュリティポリシーを更新したと彼らが言ったので、これに関して私のセキュリティチームに連絡しました。
開発者に通知しないことで、彼らをひどくscった。
その後、すべての証明書を含む新しい「cacerts」ファイルを発行しました。
%Java_HOME%/ jre/lib/security内にあるcacertsファイルを削除し、問題を解決しました。
したがって、この問題に直面している場合は、ネットワークチームからも同様のことが考えられます。
それは答えに追加です https://stackoverflow.com/a/36427118/1491414 ありがとう@MagGGG
Java cacertsをコピーしてみてください:
cp /usr/lib/jvm/Java-1.8.0-openjdk-1.8.0.172-9.b11.fc28.x86_64/jre/lib/security/cacerts $Java_HOME/jre/lib/security/cacerts
以下の方法で修正しました /
CloudFoundryを使用していて証明書の問題が発生した場合は、証明書が含まれているkeystore-serviceを使用してjarファイルをもう一度プッシュする必要があります。単にバインドを解除し、バインドして再起動するだけでは機能しません。
リポジトリURLがHTTPでも動作し、セキュリティが問題にならない場合は、settings.xml(いつもではありませんが、%USERPROFILE%/.m2
にあります)および<repository>
の場合はHTTPSをHTTPに移動) <pluginRepository>
のURL.
たとえば、
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>https://<artifactory>/libs-release</url>
</repository>
これに置き換える必要があります。
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>libs-release</name>
<url>https://<artifactory>/libs-release</url>
</repository>
Arg -Djavax.net.ssl.trustStore=
を渡すことで、JREの代わりに自分のトラストストアを使用していました。
トラストストアの証明書に関係なく、このエラーが発生しました。私にとっての問題は、arg行に渡されたプロパティの順序です。 私が-Djavax.net.ssl.trustStore=
&-Djavax.net.ssl.trustStorePassword=
before -Dspring.config.location=
&-jar
argsを入力すると、httpsを介して残りの通話を正常に呼び出せました。
私はubuntu 15.10で同じ問題を抱えています。ローカルでプラグインをダウンロードしてみてください。 https://github.com/lmenezes/elasticsearch-kopf/archive/master.Zip そして次のコマンドでインストールしてください。
Sudo /usr/share/elasticsearch/bin/plugin install file:/home/dev/Downloads/elasticsearch-kopf-master.Zip
環境によってパスが異なる場合があります。
よろしく。
ここでは通常、この種の例外は信頼できる証明書のPATHに不一致がある場合に発生します。セキュリティ保護された通信にこのサーバー証明書が必要な構成またはパスを確認してください。
Javaアプリケーションが別のアプリケーション/サイトと通信しようとしているときにLinuxコンテナでこの問題が発生する場合、証明書がロードバランサーに誤ってインポートされているためです。証明書をインポートするために従うべき一連の手順があり、正しく実行されない場合、次のような問題が表示されます。
Caused by: Sun.security.validator.ValidatorException: PKIX path building failed: Sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid
certification path to requested target
証明書が正しくインポートされたら、実行する必要があります。 JDK証明書をいじる必要はありません。
私は同じ問題に直面していて、以下の簡単なステップを使用してそれを解決します:
1)GoogleからInstallCert.Javaをダウンロードします。
2) javac InstallCert.Java を使用してコンパイルします。
3) Java InstallCert.Java を使用し、ホスト名とhttpsポートを指定してInstallCert.Javaを実行し、入力を求められたら「1」を押します。信頼されたキーストアとして「localhost」を追加し、以下のように「jssecacerts」という名前のファイルを生成します。
Java InstallCertローカルホスト:443
4)jssecacertsを$ Java_HOME/jre/lib/securityフォルダにコピーします。
ここで問題を解決するための主な情報源は以下のとおりです。
https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html