KeyTool Command Line 유틸리티를 사용하지 않고 새 Java CA Cert를 어떻게 가져 오나요?

StackOverflow https://stackoverflow.com/questions/1650596

  •  22-07-2019
  •  | 
  •  

문제

Executive 요약 : Java 코드를 사용하여 새 루트 인증서를 Java에 어떻게 설치합니까?

다양한 웹 서비스에 액세스하는 데스크탑 응용 프로그램이 있습니다. 최근 그중 하나는 SSL 인증서를 신뢰의 계약으로 전환했습니다. Trustwave SSL 인증서는 일반 인터넷 브라우저에서 수락되지만 Java는 전제 조건 루트 인증서와 함께 제공되지 않는 것으로 보이며 다음 오류 메시지와 함께 주어진 웹 서비스에 대한 액세스가 손실되었습니다.

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

우리는 공급자가 Verisign으로 다시 전환하도록 설득함으로써 임시 보물을 얻었지만 그들이 다시 전환 할 때 우리는 준비해야합니다. 따라서 필요에 따라 Trustwave 루트 인증서를 자동으로 설치하려면 데스크탑 소프트웨어가 필요합니다. 우리의 고객은 KeyTool 명령을 사용하기에 충분히 기술에 정통하지 않으며 연약한 솔루션 (Mac 및 PC에 대한 별도의 구현, Vista 실행 제한에 대한 투쟁, 올바른 JRE를 찾는 데 어려움을 겪기 때문에 스크립트가 아닙니다. , 등).

KeyTool이 내부적으로 Java를 사용한다고 생각합니다. Java 내에서 KeyTool의 기능을 복제하고 프로그래밍 방식으로 루트 인증서를 설치하기 위해 어떤 명령을 사용할 수 있습니까?

도움이 되었습니까?

해결책

그것이 가능한지 모르겠지만,이 연결 또는이 CA를 허용하기 위해 자신의 TrustManager를 구현할 수 있습니다. 여기 기본입니다.

다른 팁

IMHO, SUN은 API를 통해 KeyTool을 노출하지 않았으며, 주로 개발자가 신뢰할 수있는 CAS 세트를 수정하지 못하도록합니다. 나는 공격자들이 그러한 코드를 이용하여 자신의 루트 인증서를 트러스트 스토어의 모델을 손상시키는 신탁 상점에 삽입하는 것을 상상할 수 있습니다.

실제로 KeyTool 클래스 (Sun.Security.Tools 패키지)의 소스를 보면 최종적 일뿐 만 아니라 개인 생성자가 Code에서 KeyTool 클래스의 인스턴스를 생성하는 것을 방지하는 개인 생성자도 있습니다. KeyTool에는 주요 방법이있어 CommandLine (따라서 OS 사용자)이 KeyTool과 초기화하고 통신 할 수있는 유일한 방식 일 수 있습니다.

남은 유일한 (단순한) 접근법은 다음과 같습니다.

  • KeyTool을 응용 프로그램에서 프로세스로 초기화하고 CommandLine 인수를 통과하여 루트 CA 인증서를 설치하십시오. 이것만으로는 나쁜 생각이며, 사용자에게 무슨 일이 일어나고 있는지 알리는 것이 좋습니다.
  • KeyTool 사용을 피하고 대신 사용자에게 루트 CA를 사용하는 방법에 대한 지침을 제공합니다. 키맨 또는 KeyTool IUI. 여기서만 나 자신을 위해 말하면 후자를 선호합니다.

항상 KeyTool을 프로세스로 호출 할 수 있습니다 Runtime.exec(...).

데스크탑 머신의 신뢰할 수있는 루트의 키 스토어에 인증서를 설치하려면이를 위해 권한이 필요합니다. 그것은 동일합니다 KeyTool, 신뢰할 수있는 루트의 키 스토어에 액세스하려면 비밀번호가 필요합니다. 당신이 빠른 멍청이가되고 싶다면, 당신은 할 수 있습니다

  • 인증서를 파일 또는 바이트 스트림 또는 무엇이든 쓰기
  • 수입 사용 KeyTool 수업 (sun.security.tools.KeyTool)

그러나 IMHO 인증서가 유효하지 않으면 신뢰할 수 없습니다. 나는 그에 대한 좋은 이유가 있다고 말할 것입니다.

명령 줄 솔루션. Mac에서 Java Home은/Library/Java/Home입니다. 노력하다:

$ sudo -i
# cd /Library/Java/Home
# keytool -import -trustcacerts -alias CAName -file CA.crt -keystore lib/security/cacerts

CA의 이름으로 Caname을 대체하고 CA.CRT 인증서 파일 (PEM WORKS)의 경로가있는 CA.CRT. Keystore 비밀번호가 프롬프트됩니다. 기본 비밀번호는 링크 된 기사에 나와 있습니다.

나는 Rapidssl의 CA Certs 중 하나를 위해 이것을해야했습니다.

Sun 은이 코드를 게시하여 모든 CERT와 함께 HTTPS를 실행하는 대상 호스트를 기반으로 업데이트 된 Cacerts 파일을 작성했습니다.

https://code.google.com/p/java-use-examples/source/browse/trunk/src/com/aw/ad/util/installcert.java

새로운 Cacerts는 현재 디렉토리에서 JSSecacerts로 지명됩니다. 해당 새 파일을 JRE/LIB/SECURITY/CACERTS 파일로 복사하십시오.

새로운 Cacerts 파일의 보안에 대해서는 언급하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top