"more info" > "security" > "show certificate" > "details" > "export.."
. Выберите имя и выберите тип файла example.cer. Теперь у вас есть файл с хранилищем ключей, и вы должны добавить его в свой JVM 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 / ПК.
источник: http://magicmonster.com/kb/prg/java/ssl/pkix_path_building_failed.html
Добавление cacerts
не помогло мне. После включения журнала с флагом -Djavax.net.debug=all
, он узнал java-чтение из jssecacerts
.
Наконец-то импортировался файл jssecacerts
.
jssecacerts
, если он присутствует, в противном случае cacerts
.
– user207421
27 June 2018 в 03:31
Я исправил это, используя метод ниже -
Я столкнулся с той же проблемой и разрешил ее с помощью следующих простых шагов:
1) Загрузите InstallCert.java из google
2) Скомпилируйте его с помощью javac InstallCert. java
3) Запустите InstallCert.java с помощью java InstallCert.java с именем хоста и https-портом и нажмите «1» при запросе ввода. Он добавит «localhost» в качестве доверенного хранилища ключей и сгенерирует файл с именем «jssecacerts», как показано ниже:
java InstallCert localhost: 443
4) скопировать jssecacerts в $ JAVA_HOME / jre / lib / security folder
Основной источник для решения проблемы здесь:
https://ankurjain26.blogspot.in/2017/11/javaxnetsslsslhandshakeexception.html
С уважением,
Ankur
Для меня возникла ошибка сертификата, потому что у меня был скрипач, работающий в фоновом режиме, и это испортило сертификат. Он действует как прокси-сервер так близко и перезапускает eclipse.
Проблема:
У меня возникала следующая ошибка, когда я пытаюсь запустить mvn clean install в моем проекте и через Netbeans IDE clean and build option. Эта проблема возникает из-за того, что сертификат недоступен при загрузке через командную строку NET beans IDE / via, но можно загрузить файлы через браузер.
Ошибка:
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 / shel don / desktop / product.cer "-alias product -keystore" C: / Program Files / Java / jdk1.8.0_141 / jre / lib / security / cacerts ".
- Вам будет предложено ввести пароль. Введите пароль: введите «changeit» еще раз для «Доверяйте этому сертификату? [No]:», введите «yes»
Примеры команд командной строки / вывод:
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
- Согласие! теперь вы должны были избавиться от ошибки «Не удалось создать PKIX-путь: ошибка sun.security.provider.certpath.SunCertPathBuilderException» в вашей среде IDE NetBeans.
Я хотел импортировать сертификат для smtp.gmail.com
. Только решение для меня было 1. Введите команду для просмотра этого сертификата
D: \ openssl \ bin \ openssl.exe s_client -connect smtp.gmail.com:465
blockquote>
- Скопируйте и сохраните строки между «----- 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
теперь запустите команду, и вам хорошо идти
целей:
Как это сделать:
My Keystore
wrapper file:
public class CertificateManager {
private final static Logger logger = Logger.getLogger(CertificateManager.class);
private String keyStoreLocation;
private String keyStorePassword;
private X509TrustManager myTrustManager;
private static KeyStore myTrustStore;
public CertificateManager(String keyStoreLocation, String keyStorePassword) throws Exception {
this.keyStoreLocation = keyStoreLocation;
this.keyStorePassword = keyStorePassword;
myTrustStore = createKeyStore(keyStoreLocation, keyStorePassword);
}
public void addCustomCertificate(String certFileName, String certificateAlias)
throws Exception {
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init((KeyStore) null);
Certificate certificate = myTrustStore.getCertificate(certificateAlias);
if (certificate == null) {
logger.info("Certificate not exists");
addCertificate(certFileName, certificateAlias);
} else {
logger.info("Certificate exists");
}
tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(myTrustStore);
for (TrustManager tm : tmf.getTrustManagers()) {
if (tm instanceof X509TrustManager) {
setMytrustManager((X509TrustManager) tm);
logger.info("Trust manager found");
break;
}
}
}
private InputStream fullStream(String fname) throws IOException {
ClassLoader classLoader = getClass().getClassLoader();
InputStream resource = classLoader.getResourceAsStream(fname);
try {
if (resource != null) {
DataInputStream dis = new DataInputStream(resource);
byte[] bytes = new byte[dis.available()];
dis.readFully(bytes);
return new ByteArrayInputStream(bytes);
} else {
logger.info("resource not found");
}
} catch (Exception e) {
logger.error("exception in certificate fetching as resource", e);
}
return null;
}
public static KeyStore createKeyStore(String keystore, String pass) throws Exception {
try {
InputStream in = CertificateManager.class.getClass().getResourceAsStream(keystore);
KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(in, pass.toCharArray());
logger.info("Keystore was created from resource file");
return keyStore;
} catch (Exception e) {
logger.info("Fail to create keystore from resource file");
}
File file = new File(keystore);
KeyStore keyStore = KeyStore.getInstance("JKS");
if (file.exists()) {
keyStore.load(new FileInputStream(file), pass.toCharArray());
logger.info("Default keystore loaded");
} else {
keyStore.load(null, null);
keyStore.store(new FileOutputStream(file), pass.toCharArray());
logger.info("New keystore created");
}
return keyStore;
}
private void addCertificate(String certFileName, String certificateAlias) throws CertificateException,
IOException, KeyStoreException, NoSuchAlgorithmException {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
InputStream certStream = fullStream(certFileName);
Certificate certs = cf.generateCertificate(certStream);
myTrustStore.setCertificateEntry(certificateAlias, certs);
FileOutputStream out = new FileOutputStream(getKeyStoreLocation());
myTrustStore.store(out, getKeyStorePassword().toCharArray());
out.close();
logger.info("Certificate pushed");
}
public String getKeyStoreLocation() {
return keyStoreLocation;
}
public String getKeyStorePassword() {
return keyStorePassword;
}
public X509TrustManager getMytrustManager() {
return myTrustManager;
}
public void setMytrustManager(X509TrustManager myTrustManager) {
this.myTrustManager = myTrustManager;
}
}
Этот класс будет создавать хранилище ключей, если это необходимо, и сможет управлять сертификатами внутри него. Теперь класс для контекста SSL:
public class CustomTrustManager implements X509TrustManager {
private final static Logger logger = Logger.getLogger(CertificateManager.class);
private static SSLSocketFactory socketFactory;
private static CustomTrustManager instance = new CustomTrustManager();
private static List<CertificateManager> register = new ArrayList<>();
public static CustomTrustManager getInstance() {
return instance;
}
private X509TrustManager defaultTm;
public void register(CertificateManager certificateManager) {
for(CertificateManager manager : register) {
if(manager == certificateManager) {
logger.info("Certificate manager already registered");
return;
}
}
register.add(certificateManager);
logger.info("New Certificate manager registered");
}
private CustomTrustManager() {
try {
String algorithm = TrustManagerFactory.getDefaultAlgorithm();
TrustManagerFactory tmf = TrustManagerFactory.getInstance(algorithm);
tmf.init((KeyStore) null);
boolean found = false;
for (TrustManager tm : tmf.getTrustManagers()) {
if (tm instanceof X509TrustManager) {
defaultTm = (X509TrustManager) tm;
found = true;
break;
}
}
if(found) {
logger.info("Default trust manager found");
} else {
logger.warn("Default trust manager was not found");
}
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, new TrustManager[]{this}, null);
SSLContext.setDefault(sslContext);
socketFactory = sslContext.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);
logger.info("Custom trust manager was set");
} catch (NoSuchAlgorithmException | KeyManagementException | KeyStoreException e) {
logger.warn("Custom trust manager can't be set");
e.printStackTrace();
}
}
@Override
public X509Certificate[] getAcceptedIssuers() {
List<X509Certificate> out = new ArrayList<>();
if (defaultTm != null) {
out.addAll(Arrays.asList(defaultTm.getAcceptedIssuers()));
}
int defaultCount = out.size();
logger.info("Default trust manager contain " + defaultCount + " certficates");
for(CertificateManager manager : register) {
X509TrustManager customTrustManager = manager.getMytrustManager();
X509Certificate[] issuers = customTrustManager.getAcceptedIssuers();
out.addAll(Arrays.asList(issuers));
}
logger.info("Custom trust managers contain " + (out.size() - defaultCount) + " certficates");
X509Certificate[] arrayOut = new X509Certificate[out.size()];
return out.toArray(arrayOut);
}
@Override
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
for(CertificateManager certificateManager : register) {
X509TrustManager customTrustManager = certificateManager.getMytrustManager();
try {
customTrustManager.checkServerTrusted(chain, authType);
logger.info("Certificate chain (server) was aproved by custom trust manager");
return;
} catch (Exception e) {
}
}
if (defaultTm != null) {
defaultTm.checkServerTrusted(chain, authType);
logger.info("Certificate chain (server) was aproved by default trust manager");
} else {
logger.info("Certificate chain (server) was rejected");
throw new CertificateException("Can't check server trusted certificate.");
}
}
@Override
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
try {
if (defaultTm != null) {
defaultTm.checkClientTrusted(chain, authType);
logger.info("Certificate chain (client) was aproved by default trust manager");
} else {
throw new NullPointerException();
}
} catch (Exception e) {
for(CertificateManager certificateManager : register) {
X509TrustManager customTrustManager = certificateManager.getMytrustManager();
try {
customTrustManager.checkClientTrusted(chain, authType);
logger.info("Certificate chain (client) was aproved by custom trust manager");
return;
} catch (Exception e1) {
}
}
logger.info("Certificate chain (client) was rejected");
throw new CertificateException("Can't check client trusted certificate.");
}
}
public SSLSocketFactory getSocketFactory() {
return socketFactory;
}
}
Этот класс сделан как singleton, потому что разрешен только один контекст defaultSSL. Итак, теперь использование:
CertificateManager certificateManager = new CertificateManager("C:\\myapplication\\mykeystore.jks", "changeit");
String certificatePath = "C:\\myapplication\\public_key_for_your_ssl_service.crt";
try {
certificateManager.addCustomCertificate(certificatePath, "alias_for_public_key_for_your_ssl_service");
} catch (Exception e) {
log.error("Can't add custom certificate");
e.printStackTrace();
}
CustomTrustManager.getInstance().register(certificateManager);
Возможно, он не будет работать с этими настройками, потому что я сохраняю файл сертификата внутри папки ресурсов, поэтому мой путь не является абсолютным. Но в целом, он отлично работает.
available()
специально предупреждается в своем собственном Javadoc.
– user207421
27 June 2018 в 03:32
Это дополнение к ответу https://stackoverflow.com/a/36427118/1491414 . Спасибо @MagGGG
После многих часов, пытаясь создать файлы сертификатов, чтобы моя установка на Java 6 работала с новым сертификатом twitter, я, наконец, наткнулся на невероятно простое решение, заложенное в комментарии на одной из досок объявлений. Просто скопируйте файл cacerts из установки Java 7 и перезапишите его в вашей версии Java 6. Наверное, лучше сначала сделать резервную копию файла cacerts, но тогда вы просто скопируете новый и BOOM! он просто работает.
Обратите внимание, что я фактически скопировал файл cacerts Windows на установку Linux, и он работал нормально.
Файл находится в jre/lib/security/cacerts
как в старой, так и в новые установки jdk для Java.
Надеюсь, это сэкономит время на обострение.
$JAVA_HOME/jre/lib
, а не $JAVA_HOME/lib
- я потратил немного времени на то, чтобы не допустить этой детали.
– Ryan Heathcote
14 July 2016 в 16:47
Здесь обычно такое исключение возникает, когда в PATH доверенного сертификата существует несоответствие. Проверьте конфигурацию или путь, где требуется сертификат сервера для защищенной связи.
Попробуйте загрузить целевой URL-адрес в браузере и просмотреть сертификат сайта (обычно он доступен значком с надписью блокировки. Он находится слева или справа от адресной строки браузера) истек или не доверен по другой причине.
Новые версии обычно поставляются с обновленным набором доверенных сертификатов.
Также, если это возможно, удалите старые версии. Это приведет к ошибкам неправильной конфигурации.
Если вы разрабатываете под JDK, отличную от последней доступной, попробуйте заменить файл %JAVA_HOME%/jre/lib/security/cacerts
на новый с последней установленной JRE (сначала сделайте резервную копию ), как @ jeremy-goodell предлагает в своем ответе
Если ничто из вышеизложенного не решит вашу проблему, используйте keytool
для сохранения сертификата (ов) в хранилище ключей Java:
keytool -trustcacerts -keystore "%JAVA_HOME%jre\lib\security\cacerts" -storepass changeit -importcert -alias <alias_name> -file <path_to_crt_file>
Файл с сертификатом можно получить из браузера, как @MagGGG предлагает в своем ответе .
Примечание 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
У меня была немного другая ситуация, когда в моей системе присутствовали как 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 path building ошибка.
Я добавил отладочную информацию в CLI java, используя java -Djavax.net.debug=all ... > debug.log
. В файле debug.log строка, начинающаяся с trustStore: , фактически указывает на хранилище cacerts, найденное в [JRE_FOLDER]\lib\security\cacerts
.
В моем случае решение заключалось в том, чтобы скопировать файл cacerts, используемый JDK (который добавил новые CA), поверх того, который использовался JRE, и это устранило проблему.
МОЙ подход к пользовательскому интерфейсу:
CMD-Line:
keytool -importcert -file dinardap_cert.cer –alias dinardap –keystore “%JAVA_HOME%/jre/lib/security/cacerts”
– Patricio Bonilla
26 July 2017 в 20:13
Это не ответ на Твиттер, но это вопрос, который возникает при поиске этой ошибки. Если ваша система получает эту ошибку при подключении к веб-сайту, который, как представляется, имеет действительный сертификат при просмотре в веб-браузере, это, вероятно, означает, что веб-сайт имеет незавершенную цепочку сертификатов.
Для краткого изложения проблемы: органы сертификации не используют свой корневой сертификат для подписи только какого-либо старого сертификата. Вместо этого они (обычно) подписывают промежуточные сертификаты, которые также имеют установленный флаг центра сертификации (то есть разрешены для подписания сертификатов). Затем, когда вы покупаете сертификат из ЦС, они подписывают ваш CSR с одним из этих промежуточных сертификатов.
В вашем хранилище доверия Java скорее всего есть только Root Cert, а не промежуточные.
Неправильно сконфигурированный сайт может вернуть только свой подписанный сертификат. Проблема: он был подписан с промежуточным сертификатом, который не находится в вашем магазине доверия. Браузеры справятся с этой проблемой, загрузив или используя промежуточный сертификат с кешем; это максимизирует совместимость с сайтом. Однако Java и инструменты, такие как OpenSSL, не будут. И это вызовет ошибку в вопросе.
Вы можете проверить это подозрение, используя Qualys SSL Test . Если вы запустили это на сайте, и он говорит:
Цепочка сертификата этого сервера неполна.
, который подтверждает это. Вы также можете увидеть это, посмотрев пути сертификации и увидев текст Extra Download .
Как это исправить: администратору сервера необходимо настроить веб-сервер для возврата промежуточного сертификаты. Например, для Comodo это файл
.ca-bundle
пригодится. Например, в конфигурации Apache с mod_ssl вы должны использовать настройку конфигурацииSSLCertificateChainFile
. Для nginx вам необходимо объединить промежуточные сертификаты и подписанный сертификат и использовать их в конфигурации SSL-сертификата. Вы можете найти больше, выполнив поиск «незавершенной цепи сертификатов» в Интернете.
Я столкнулся с этим вопросом, пытаясь установить плагин Cucumber-Eclipse в 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-адрес, предоставленный для сайта обновлений:
https://cucumber.io/cucumber-eclipse/update -site
Однако при навигации по нему через браузер он перенаправляется (обратите внимание на добавленный «.github»):
http://cucumber.github.io/cucumber-eclipse/update-site/
Таким образом, разрешение состоит в том, чтобы просто использовать перенаправленную версию URL сайта обновления при добавлении сайта обновления в eclipse.
Я наткнулся на эту проблему, которая потребовала много часов исследований для исправления, особенно с автогенерированными сертификатами, которые, в отличие от официальных, довольно сложны, и Java им не нравится.
Пожалуйста проверьте следующую ссылку: Решите проблему с сертификатами в Java
В основном вам нужно добавить сертификат с сервера в сертификаты Java Home.
InstallCert
и выполните его, пока сервер , предоставляя следующие аргументы server[:port]
. Пароль не требуется, поскольку исходный пароль работает для сертификатов Java («changeit»). jssecerts
внутри каталога, в котором вы выполнили программу (если выполняется из Eclipse, убедитесь, что вы настроили рабочий каталог в 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);
}
}
}
-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true
Он используется для перехода к проверке сертификата.
У меня такая же проблема на 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
Путь может отличаться в зависимости от вашей среды.
С уважением.
alias
в командной строке должно быть уникальным. – Lu55 12 September 2017 в 18:50