요청된 대상에 대한 올바른 인증 경로를 찾을 수 없음 - 인증서를 가져온 후에도 오류가 발생했습니다.
Java 클라이언트가 자기 서명 증명서를 사용하여 서버에 액세스하려고 합니다.
서버에 투고하려고 하면, 다음의 에러가 표시됩니다.
요청된 대상에 대한 올바른 인증 경로를 찾을 수 없습니다.
그 문제에 대해 조사를 한 후, 다음과 같이 했습니다.
- 을 「 」로 했습니다.
root.cer
filename을 클릭합니다. - 유리 생선
keytool -import -alias example -keystore cacerts -file root.cer
- 추가되었는지 cert를 실행했습니다.
keytool -list -v -keystore cacerts
을 사용하다 - 그리고 글래스피쉬를 재기동하고 '포스트'를 은퇴했다.
같은 에러가 아직 발생.
내 Glassfish가 실제로 내가 수정한 cacert 파일을 읽고 있는 것이 아니라 아마도 다른 파일을 읽고 있기 때문인 것 같습니다.
여러분 중 누가 이런 문제를 겪었습니까? 저를 올바른 방향으로 이끌 수 있을까요?
불행히도 - 많은 것들이 있을 수 있다 - 그리고 많은 앱 서버들과 다른 자바 '워퍼'들은 속성을 가지고 놀기 쉽고 그들의 '소유'는 키체인과 같은 것들을 차지하기 쉽다.그래서 그것은 완전히 다른 것을 보는 것일지도 모른다.
트러스링만 없다면, 난 할 수 있어:
java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=trustStore ...
도움이 되는지 알아봐야지'모두' 대신 키 관리자 및 신뢰 관리자로 설정할 수도 있습니다. 이 경우 도움이 될 수 있습니다.대부분의 플랫폼에서 '도움말'로 설정하면 다음과 같은 항목이 나열됩니다.
단, 키스토어(비밀키를 가지고 있어 자신의 신원을 증명하는 것)와 신뢰스토어(신뢰하는 사람을 결정하는 것)의 차이와 자신의 아이덴티티가 루트에 대한 '신뢰 체인'을 가지고 있다는 사실을 완전히 이해해야 합니다.이것은, f에 필요한 루트에 대한 어떠한 체인으로부터도 분리되어 있습니다.네가 믿는 '누구'를 찾아봐
all turn on all debugging
ssl turn on ssl debugging
The following can be used with ssl:
record enable per-record tracing
handshake print each handshake message
keygen print key generation data
session print session activity
defaultctx print default SSL initialization
sslctx print SSLContext tracing
sessioncache print session cache tracing
keymanager print key manager tracing
trustmanager print trust manager tracing
pluggability print pluggability tracing
handshake debugging can be widened with:
data hex dump of each handshake message
verbose verbose handshake message printing
record debugging can be widened with:
plaintext hex dump of record plaintext
packet print raw SSL/TLS packets
출처: # http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug 참조.
다음은 해결 방법입니다.다음 링크에 따라 스텝 바이 스텝을 수행합니다.
JAVA FILE : 블로그에서 찾을 수 없습니다.
/*
* 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.
*/
import java.io.*;
import java.net.URL;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*;
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 <host>[: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);
}
}
}
JSE 시스템 속성을 구성해야 합니다. 특히 클라이언트 인증서 저장소를 가리킵니다.
명령줄 경유:
java -Djavax.net.ssl.trustStore=truststores/client.ts com.progress.Client
또는 Java 코드:
import java.util.Properties;
...
Properties systemProps = System.getProperties();
systemProps.put("javax.net.ssl.keyStorePassword","passwordForKeystore");
systemProps.put("javax.net.ssl.keyStore","pathToKeystore.ks");
systemProps.put("javax.net.ssl.trustStore", "pathToTruststore.ts");
systemProps.put("javax.net.ssl.trustStorePassword","passwordForTrustStore");
System.setProperties(systemProps);
...
(다른 답변에서 회신)
필요한 증명서를 Import(및 신뢰!)하기 위해 Java 소프트웨어 배포의 cli 유틸리티 키툴을 사용합니다.
샘플:
cli에서 dir를 jre\bin으로 변경합니다.
디렉토리에 )keystore를 합니다.
keytool - list - keystore ..\lib\security\certs
패스워드는 change it 입니다.필요한 서버에서 체인으로 모든 증명서를 다운로드하여 저장합니다.
추가합니다( 「 전용
..\lib\security\cacerts
를 실행합니다.keytool -alias REPLACE_TO_ANY_UNIQ_NAME - Import - keystore.\lib\security\securts - 파일 "r:\root.crt"
우연히 이렇게 간단한 팁을 발견했어요.다른 솔루션에서는 InstallCert를 사용해야 합니다.Java 및 JDK
출처 : http://www.java-samples.com/showtutorial.php?tutorialid=210
나도 같은 문제가 있었다.
ssl을 통해 repo1.maven.org에서 종속성을 가져오려고 했습니다.
그러나 "요청된 대상 URL에 대한 유효한 인증 경로를 찾을 수 없습니다."라고 말했습니다.
그래서 이 글을 팔로우했는데도 접속을 확인하지 못했습니다.
그래서 나는 그것에 대해서는 뿌리가 우승할 것은 충분하지 않는post,so-그래서 그 기사를 읽었더니 포스트에서 제시한 루트 증명서로는 불충분하더군요에 의해 제안되었다는 것을 발견했다 읽었다.
제게 효과가 있었던 것은 중간 CA 증명서를 키스토어에 Import하는 것이었습니다.
나는 이 체인에 그것은 신통하게 일하는 모든 인증서가 덧붙였다.사실 자격증도 체인에 다 넣었는데 잘 되더라고요.
JDK 8에서 JDK 10으로 이행하는 경우의 솔루션
- 인증서는 반드시 정말 다르다.
증명서가 정말 다르다.
- JDK 10은 80, JDK 8은 151
- 자바 개발 키트 10은 최근 자바 개발 키트 10은최근에 추가되었다 추가해 왔다.
certs
JDK 10
root@c339504909345:/opt/jdk-minimal/jre/lib/security # keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 80 entries
JDK 8
root@c39596768075:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts # keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN
Your keystore contains 151 entries
수정 절차
- JDK 10 인증서를 삭제하고 JDK 8로 교체했습니다.
- 내가 Docker 영상을 만들고 있어요, 나는 재빨리Multi-stage이 건축 에너지를 이용해서 이렇게 할 수 있었다.
Docker 이미지를 빌드하고 있기 때문에 다단계 빌드를 사용하여 신속하게 빌드할 수 있습니다.
- 나는 최소한의 JRE최소 JRE를 만들고 있습니다를 사용하여를 짓고 있다.
jlink
~하듯이로/opt/jdk/bin/jlink \ --module-path /opt/jdk/jmods...
- 나는 최소한의 JRE최소 JRE를 만들고 있습니다를 사용하여를 짓고 있다.
자, 여기 다른 경로와 명령어 순서가 있습니다.
# Java 8
COPY --from=marcellodesales-springboot-builder-jdk8 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts /etc/ssl/certs/java/cacerts
# Java 10
RUN rm -f /opt/jdk-minimal/jre/lib/security/cacerts
RUN ln -s /etc/ssl/certs/java/cacerts /opt/jdk-minimal/jre/lib/security/cacerts
www.udemy.com (REST Java Web Services)에서 REST 웹 서비스 튜토리얼을 작성하고 있습니다.튜토리얼의 예에서는 SSL을 사용하기 위해서는 이클립스 "클라이언트" 프로젝트에 "trust_store"라는 폴더가 있어야 합니다.이 폴더에는 "키 스토어" 파일이 포함되어 있어야 합니다(서비스를 호출하는 "클라이언트" 프로젝트와 REST 웹 서비스를 포함하는 "서비스" 프로젝트가 있습니다).이클립스 워크스페이스에 2개의 프로젝트, 1개의 클라이언트, 다른 프로젝트가 포함되어 있습니다.서비스)를 참조해 주세요.단순하게 하기 위해 사용하고 있는 글라스피쉬 앱 서버(glassfish\domains\config\keystore.jks)에서 "keystore.jks"를 복사하여 클라이언트프로젝트에서 작성한 이 "trust_store" 폴더에 넣으라고 했습니다.서버의 key_store에 있는 자기서명증명서는 클라이언트 trust_store에 있는 증명서와 일치합니다.이렇게 하면 원래 게시물에서 언급한 오류가 나타납니다.이 에러는 클라이언트의 "keystore.jks" 파일에 신뢰할 수 있는 증명서 또는 서명된 증명서가 포함되어 있지 않기 때문에 검출된 증명서가 자기서명이 되어 있는 것을 구글에서 확인했습니다.
알기 쉽게 하기 위해서, 「keystore.jks」에는 자기 서명 증명서가 포함되어 있고, 「cacerts.jks」파일에는 CA 증명서(CA가 서명)가 포함되어 있는 것으로 알고 있습니다."keystore.jks"는 "keystore"이고 "cacerts.jks"는 "신뢰 저장소"입니다.코멘터인 "Bruno"가 위에서 말했듯이 "keystore.jks"는 로컬이고 "cacerts.jks"는 리모트클라이언트용입니다.
그래서 저는 '유리피쉬'에도 'cacerts.jks'라는 글라스피쉬의 trust_store 파일, cacerts라는 파일이 있다고 생각했습니다.jsk에는 CA 증명서가 포함되어 있어야 합니다.그리고 적어도1개의 CA 증명서가 있는 키스토어 파일을 격납하려면 trust_store 폴더가 필요하다고 합니다.그래서 클라이언트 프로젝트에서 작성한 "trust_store" 폴더에 "cacerts.jks" 파일을 넣고 VM 속성을 "keystore.jks"가 아닌 "cacerts.jks"를 가리키도록 변경해 보았습니다.그것은 오류를 없앴다.일을 하려면 CA 자격증만 있으면 됐나 봐요.
이것은, 실가동이나, 단지 작업을 개시하는 것 이상의 개발에 있어서도 이상적이지 않을 수 있습니다.예를 들어 "keytool" 명령을 사용하여 CA 증명서를 클라이언트의 "keystore.jks" 파일에 추가할 수 있습니다.그러나, 어쨌든, 이것으로 에러의 원인이 될 가능성이 있는 시나리오가 최소한 좁혀지는 것이 바람직합니다.
또한: 제 접근방식은 클라이언트(클라이언트 trust_store에 추가된 서버 증명서)에 도움이 될 것 같습니다.원래 투고를 해결하기 위한 코멘트는 서버(서버 trust_store에 추가된 클라이언트 증명서)에 도움이 될 것 같습니다.건배.
Eclipse 프로젝트 설정:
- My Client 프로젝트
- src
- 시험
- JRE 시스템 라이브러리
- ...
- trust_storetrust_store
---cacerts.jks---keystore.jks---conterts.jks---keystore.jks
MyClientProject.java 파일의 일부:
static {
// Setup the trustStore location and password
System.setProperty("javax.net.ssl.trustStore","trust_store/cacerts.jks");
// comment out below line
System.setProperty("javax.net.ssl.trustStore","trust_store/keystore.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
//System.setProperty("javax.net.debug", "all");
// for localhost testing only
javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
return hostname.equals("localhost");
}
});
}
는 이 에러는, 에 액세스 하려고 했을 때에 발생했습니다로 접속을 해 나는 이 오류를 가로질러 왔다.https
자기 서명 증명서를 사용하고 있는 어플리케이션의 url.이 서비스에서는.cert
파일 및 그게 어디를 올려 놓지 않았다.파일을 어디에 둬야할지 모르겠더라고요.하다
키 도구 위치는 JDK/bin 폴더 아래에 있습니다.
방법 1: 증명서를 기본 Java Truststore에 추가합니다(cacerts:
keytool -import -alias myCert -file C://certificate.cert -keystore C://Program Files//Java//jdk1.8.0_271//jre//lib//security//cacerts
비밀번호: 변경
방법 2:.
신뢰 저장소 만들기:
keytool -import -alias myCert -file C://certificate.cert -keystore myTrustStore
다음과 같은 프롬프트가 표시됩니다.이 프롬프트는 다음과 같이 표시됩니다.
Enter keystore password:changeit
Re-enter new password:changeit
Trust this certificate?yes
이 명령을 실행한 폴더 내에 myTrustStore 파일이 생성됩니다.이 "mytrust Store"를 편리한 위치에 복사하십시오.
트러스트 스토어 사용
응용 프로그램/서버 실행 중에 다음 JVM 인수를 전달합니다.
-Djavax.net.ssl.trustStore=C://myTrustStore -Djavax.net.ssl.trustStorePassword=changeit
문제는 Cloud Access Security Broker인 NetScope가 소프트웨어 업데이트를 통해 업무용 노트북에 설치되었다는 것입니다.이로 인해 증명서 체인이 변경되어 전체 체인을 cacerts keystore로 Import한 후에도 Java 클라이언트를 통해 서버에 접속할 수 없었습니다.NetScope 를 무효로 해, 정상적으로 접속할 수 있었습니다.
해 주세요.$JAVA_HOME/lib/security/cacerts
링크였어./etc/ssl/certs/java/cacerts
파일을 수 JVM을 이용하다
솔루션:실제 cacerts 파일을 복사합니다(다른 JDK에서 복사 가능)./etc/ssl/certs/java/
: ) : ) directory directory directory directory directory directory 。 : )
제 경우 Tomcat 프로세스에서 특정 키스토어가 제공되었기 때문에 이 문제에 직면하게 되었습니다.
-Djavax.net.ssl.trustStore=/pathtosomeselfsignedstore/truststore.jks
증명서를 JRE/lib/security의 cacert로 Import하고 있었는데 변경이 반영되지 않았습니다.그런 다음 /tmp/cert1.test에 타겟서버의 증명서가 포함되어 있는 명령어를 실행했습니다.
keytool -import -trustcacerts -keystore /pathtosomeselfsignedstore/truststore.jks -storepass password123 -noprompt -alias rapidssl-myserver -file /tmp/cert1.test
인증서 가져오기가 성공했는지 다시 확인할 수 있습니다.
keytool -list -v -keystore /pathtosomeselfsignedstore/truststore.jks
taget 서버가 alias rapidssl-myserver에 대해 검색되는지 확인합니다.
제 경우 AWS Gover Postgres RDS에 접속할 때 오류가 발생했습니다.GOVAN RDS CA 인증에는 별도의 링크가 있습니다.https://s3.us-gov-west-1.amazonaws.com/rds-downloads/rds-combined-ca-us-gov-bundle.pem
이 pem certs를 java의 cacerts에 추가합니다.아래 스크립트를 사용할 수 있습니다.
-------WINDOWS 스텝---------
- VSCODE 에디터를 사용하여 openssl, keytool 플러그인 설치
- C:/rds-ca에서 dir 작성
- dir 'rd-ca' 안에 스크립트 파일 아래에 'addCerts.sh'을 배치합니다.
- vscode에서 실행: 4.1 cd /c/rds-ca/ 4.2 ./addCerts.쉿
- cacerts를 ${JAVA_로 복사HOME}/jre/lib/security
스크립트 코드:
#!/usr/bin/env sh
OLDDIR="$PWD"
CACERTS_FILE=cacerts
cd /c/rds-ca
echo "Downloading RDS certificates..."
curl https://s3.us-gov-west-1.amazonaws.com/rds-downloads/rds-combined-ca-us-gov-bundle.pem > rds-combined-ca-bundle.pem
csplit -sk rds-combined-ca-bundle.pem "/-BEGIN CERTIFICATE-/" "{$(grep -c 'BEGIN CERTIFICATE' rds-combined-ca-bundle.pem | awk '{print $1 - 2}')}"
for CERT in xx*; do
# extract a human-readable alias from the cert
ALIAS=$(openssl x509 -noout -text -in $CERT |
perl -ne 'next unless /Subject:/; s/.*CN=//; print')
echo "importing $ALIAS"
keytool -import \
-keystore $CACERTS_FILE \
-storepass changeit -noprompt \
-alias "$ALIAS" -file $CERT
done
cd "$OLDDIR"
echo "$NEWDIR"
그 문제로 많은 시간을 허비했다.증명서를 Import 했을 경우, 여기에 표시됩니다.
keytool -list -v -keystore $JAVA_HOME/lib/security/cacerts
그런 다음 다음 SITE_NAME, SITE_PORT, CERTIFICATE_NAME 및 파일을 저장할 경로를 새로 만듭니다.
echo -n | openssl s_client -connect SITE_NAME:SITE_PORT \
| openssl x509 > /path/to/save/CERTIFICATE_NAME.cert
제 경우 스프링과 함께 Keyclock을 사용하는 데 문제가 있었습니다.이 명령어로 증명서를 생성하여 키스토어로 Import하면 문제가 해결되어 정상적으로 동작합니다.
*** 이클립스 / Sts 사용자: 이클립스는 자체 jre를 사용하기 때문에 자체 jre에 인증서를 추가해야 합니다.Sts의 jre에 certs를 추가할 때까지 이 문제가 있었습니다.SSL 로그:
`javax.net.ssl|DEBUG|1A|restartedMain|2021-12-06 23:04:00.874` IRST|TrustStoreManager.java:113|trustStore is: D:\sts-4.12.0.RELEASE\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_16.0.2.v20210721-1149\jre\lib\security\cacerts
이것은 풀 패스입니다.sts-4.12.0RELEASE\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_16.0.2.v (10721-1149\jre\lib\security\securts)
Windows 10 노트북으로 ubuntu를 작성했는데 https://github.com/yahoo/CMAK 사이트에서 CMAK 사이트 다운로드를 로드하려고 할 때 문제가 발생했습니다.처음에 치명적인 ssl 오류가 발생하였습니다.
openssl s_client -showcerts -servername github.com -connect github.com:443 </dev/null 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' > github-com.pem
다음 명령어를 사용합니다(ca-cert에 올바른 경로를 입력해 주세요).
cat github-com.pem | sudo tee -a /etc/ssl/certs/ca-certificates.crt
다음으로 다음 문장을 사용합니다(증명서 경로가 올바른지 확인합니다).
git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt
그 후 CMAK를 다운받을 수 있었지만, 막상 다운받으려 하자 문제가 생겼다../sbt clean
진술.그것은 을 주고 있었어pkix path
오류입니다. 그 이유는 회사 발행 증명서가 제 cacert 파일에 저장되어 있지 않기 때문입니다.
회사 증명서(방법 구글)를 다운로드하여 이 문서에 따라 다운로드한 증명서를 cacert 파일에 추가했습니다.사용했다sudo update-ca-certificates
번 더 ./sbt
가 있었어그것은 나에게 효과가 있었다.
주의: 위의 절차를 수행할 때는 root과 exit을 전환해야 할 수 있습니다.
나는 이것을 pom.xml 파일에 추가했고 그것은 나에게 효과가 있었다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
</plugin>
</plugins>
</build>
언급URL : https://stackoverflow.com/questions/9210514/unable-to-find-valid-certification-path-to-requested-target-error-even-after-c
'programing' 카테고리의 다른 글
C/C++에서의 누적 정규 분포 함수 (0) | 2022.07.16 |
---|---|
Vue-i18n 싱글 파일 컴포넌트가 작동하지 않음 (0) | 2022.07.16 |
Vee-validate는 항상 true를 반환합니다. (0) | 2022.07.16 |
Vuex - 네임스페이스 + mapMutations + 함수? (0) | 2022.07.16 |
Java에서 사용자 정의 예외를 만드는 방법 (0) | 2022.07.16 |