Mavenを使用する場合のエラー:「Sun.security.provider.certpath.SunCertPathBuilde jssecacerts PKIXパスの構築に失敗しました」

[]
解決法:
方法1:SSL証明書のチェックを無視します

Mavenの後にパラメータ "-Dmaven.wagon.http.ssl.insecure =真-Dmaven.wagon.http.ssl.allowall = true" のコマンドを追加します。

方法2は、JDK、JREのセキュリティ証明書を生成し、に導入します

1.証明書JDKを生成

インポートするjavax.net.ssl *。;
輸入java.io. *;
輸入java.security.KeyStoreクラス。
輸入java.security.MessageDigestの;
輸入java.security.cert.CertificateException。
輸入はjava.security.cert.X509Certificate。

パブリッククラスInstallCert {

公共の静的な無効メイン(文字列[]引数)例外{スロー
文字列のホストと、
int型のポート;
[]パスフレーズをchar型。
IF((args.length == 1)||(args.length == 2)){
文字列[] C =引数[0] .split( ":");
ホスト=のC [0]。
ポート=(c.length == 1)?443:Integer.parseInt(C [1])。
列P =(args.length == 1)?"changeitと":引数[1]。
パスフレーズ= p.toCharArray()。
} {他
のSystem.outの
.println( "使用:JavaのInstallCert <ホスト> [:ポート] [パスフレーズ]")。
返します。
}

ファイルファイル=新しいファイル( "jssecacerts");
IF(偽file.isFile()==){
チャー9月= File.separatorChar。
ファイルDIR =新しいファイル(はSystem.getProperty( "java.homeの")+ 9月+ "LIB"
+ 9月+ "セキュリティ");
ファイル=新しいファイル(ディレクトリ、 "jssecacerts");
もし(偽file.isFile()==){
ファイル=新しいファイル(ディレクトリ、 "cacertsキー");
}
}
のSystem.out.println( "ロードキーストア" +ファイル+ "...");
=新しいFileInputStreamを(ファイル)でのInputStream。
キーストアKS = KeyStore.getInstance(KeyStore.getDefaultType())。
ks.load(パスフレーズ、IN)。
in.close();

SSLContextのコンテキスト= SSLContext.getInstance( "TLS")。
TrustManagerFactory TMF =のTrustManagerFactory
.getInstance(TrustManagerFactory.getDefaultAlgorithm())。
tmf.init(KS)。
X509TrustManager defaultTrustManager TMF =(のX509TrustManager)
.getTrustManagers()[0];
SavingTrustManagerのTM =新しいSavingTrustManager(defaultTrustManager)。
context.init(ヌル、新規のTrustManager [] {TM}、NULL);
SSLSocketFactory工場= context.getSocketFactory()。

System.out
.println(+ホスト+ "への接続を開く" ":" +ポート+ "...");
SSLSocketソケット=(のSSLSocket)factory.createSocket(ホスト、ポート)。
socket.setSoTimeout(10000);
{しようと
するSystem.out.println( "SSLハンドシェイクを開始しています...");
socket.startHandshake();
socket.close();
System.out.println();
System.out.println(「証明書がすでに信頼されているエラーなし」);
}キャッチ(SSLException電子){
のSystem.out.println();
e.printStackTrace(のSystem.out)。
}

X509Certificateの[]チェーン= tm.chain。
IF(鎖== NULL){
するSystem.out.println( "サーバ証明書チェーンを取得できませんでした")。
返します。
}

BufferedReaderのリーダー=新しいBufferedReaderの(新しいInputStreamReaderの(
System.in))。

System.out.println();
System.out.println( "サーバー送ら" + chain.length + "証明書(S):");
System.out.println();
するMessageDigest SHA1 = MessageDigest.getInstance( "SHA1")。
するMessageDigest MD5 = MessageDigest.getInstance( "MD5")。
以下のために(; iはchain.length <; I = 0 int型私は++){
のX509Certificate CERT =鎖を[I]。
System.out.println( " "+(I + 1)+"件名"
+ cert.getSubjectDN())。
System.out.println( "発行者" + 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(「終了し、信頼キーストアや『Q』に追加する証明書を入力します:[1]」);
列ライン= reader.readLine())(トリム。
int型のk;
{試みる
K =(line.length()== 0)?0:Integer.parseInt(行) - 1。
{}キャッチ(NumberFormatExceptionが電子)
のSystem.out.printlnは( "キーストアが変更されていません")。
返します。
}

X509CertificateのCERT =チェーン[K]。
ストリングエイリアス=ホスト+ " - " +(K + 1)。
ks.setCertificateEntry(別名、CERT)。

( "jssecacerts")=新しいのFileOutputStreamを出したOutputStream。
ks.store(アウト、パスフレーズ)。
out.close();

System.out.println();
System.out.println(CERT)。
System.out.println();
System.out
.println( " 'jssecacerts'を使用してエイリアスをキーストアに追加の証明書'"
+エイリアス+ "'");
}

プライベート静的最終CHAR [] HEXDIGITS = "0123456789ABCDEF" .toCharArray()。

プライベート静的な文字列toHexString(バイト[]バイト){
(* 3 bytes.length)StringBuilderのSB =新規のStringBuilder。
(int型B:バイト)のために{
B&= 0xFFで、
sb.append(HEXDIGITS [B >> 4])。
sb.append(HEXDIGITS [B&15])。
sb.append(」「);
}
)(sb.toStringを返します。
}

プライベート静的クラスSavingTrustManagerは{のX509TrustManagerを実装します

民間最終のX509TrustManagerのTM;
民間のX509Certificate []チェーン。

SavingTrustManager(のX509TrustManagerのTM){
this.tm = TM。
}

公共X509Certificateには、[] getAcceptedIssuers(){
)(新しいUnsupportedOperationExceptionがスロー。
}

公共ボイドcheckClientTrustedメソッド(のX509Certificate []チェーン、文字列のauthType)が
CertificateExceptionが{スロー
)(新しいUnsupportedOperationExceptionがスロー。
}

公共ボイドcheckServerTrusted(X509Certificateの[]チェーン、文字列のauthType)が
CertificateException {スロー
this.chain =鎖;
tm.checkServerTrusted(鎖のauthType)。
}
}

}
プログラムを実行し、入力パラメータの後インタラクティブ、バックグラウンドプロセスは、jssecacerts証明書を生成し、(例えばrepo.maven.apache.org)ドメインを通過しました。
2.得られたライブラリーJREのセキュリティ証明書に

結果の証明書は$ JAVA_HOME / JRE / libに/セキュリティにコピーされます

設定を有効にするため3.システムを再起動します

パラメータ-Djavax.net.ssl.trustStore = $ JAVA_HOME / jre / lib / security / cacertsに4. MVN命令

おすすめ

転載: www.cnblogs.com/wuxingang/p/11240040.html