OAuth2등을 위해서 java http 통신상에서 remote server가  https를 사용하는 경우 서버상에 해당 인증서 정보를 등록하지 않으면 아래와 같은 오류가 발생한다.

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
java.lang.NullPointerException

핵심은 브라우져가 아닌 java상에서 호출하기 때문이다.

java는 이를 위해  /jre/lib/security/cacerts 파일에 인증서 정보를 등록해서 사용한다.

cacerts파일은 handling은 %java_home%/bin/keytool 명령어를 통해서 관리한다. 

 

1. 현재 서버에 등록된 인증서 정보 조회
keytool -list -v -keystore java_home/jre/lib/security/cacerts

 

2. 인증서의 keystore정보에서 인증서를 파일로 추출
keytool -exportcert -keystore "keystore파일" -storepass "keystore파일의 비밀번호" -file xxx.cert -alias "alias name"

 

3. 앞에서 추출한 파일정보를 cacerts에 추가한다. (cacerts의 default 비밀번호는 changeit 임)
keytool -importcert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -storepass changeit -file xxx.cert -alias "alias name"

 

인증서정보 추가결과

위와 같이 하면 오류가 없어짐.

 

java.security.KeyStore class에 대한 사용

 

KeyStore 파일에서 로딩하려면 저장된 keystore파일 경로와 비밀번호, 그리고 keystore저장시 지정된 alias이름을 알아야함.
KeyStore의 Instance생성은 KeyStore keystore = KeyStore.getInstance("jks"); 와 같은 형태임.
getInstance파라메터에는 keytype이 들어가야함. default는 "jks" 임.

 

keystore.load(new FileInputStream("keystore 파일 경로"), keystorepasswd);

로딩한 keystore파일정보를 조회

Certificate cf = keystore.getCertificate("alias Name");

위의 certificate정보를 출력해서 정상적으로 로딩되었는지 확인 가능.

 

이렇게 로딩된 keystore파일을 이용해서 ssl 통신에서 사용.

아래의 소스는 unirest lib를 이용한 호출시 적용예

public void setKeyStore() throws Exception {
		
//  ClassPathResource keyResource = new ClassPathResource(keyStorePath);
    FileInputStream fIn = new FileInputStream("/home/user/test.keystore");

    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());		
    keyStore.load(fIn, keyPass.toCharArray());

    //alias 포함여부 확인
    System.out.println("alias exist>>" + keyStore.containsAlias("alias name"));
    //alias를 통한 certificate 정보 조회
    System.out.println("cert info>>" + keyStore.getCertificate("alias name"));
        
    //SSL 통신을 하기 위해 Unirest정보에 cert정보 로딩.
    //여기서 인증서 정보가 cacerts에 등록되지 않으면 오류발생함.
    Unirest.config().clientCertificateStore(keyStore, keyPass);
}

 

 

참고 : www.lesstif.com/system-admin/java-validatorexception-keystore-ssl-tls-import-12451848.html

 

 



DBeaver workspace 변경

Posted 2021. 4. 13. 17:12

사용하던 Windows PC가 느려지거나 오동작한 경우 종종 PC를 초기화하여 사용하게 된다.

백업을 열심히 받고, 빠진게 없나 살펴보았지만 꼭 설치하고나면 빠진게 있어 멘붕이 오곤한다.

 

개발관련 프로그램이나 자료는 대부분  D드라이브에 위치하기 때문에 백업에서 자유롭긴한데, 그래도 빠지는것들이 발생한다.

Eclipse기반의 DBeaver를 사용중인데, 자주 빼먹는 백업요소중 하나이기도 하다. 

설치후 Default로 사용하게 되는 dbeaver의 workspace는 c:\Users\{사용자}\ 이하 디렉토리이다.

정확한 경로는 

공식문서를 찾아보니 CLI를 이용한 -data 옵션으로 실행하면 가능하다고 되어있다. 

command line에서 실행할때 파라메터로 -data 를 이용해서 workspace를 추가하면 된다는 내용인듯.

설치디렉토리에 가보니 dbeaver.exe 외에 dbeaver-cli.exe도 있다. 실행해보니 잘되긴 하는데... 문제는 로그가 foreground로 올라온다.  이건 아니다 싶어 혹시나하고 dbeaver.exe에도 동일한 옵션을 붙여서 해보니 동일하게 잘 된다. 뭐지?

( 설치디렉토리의 readme.txt를 보니 꼭 cli.exe라고 한정하지 않고 있다. )

 

바로가기를 만들고 대상입력란에 -data 옵션추가해서 사용하면 끝.

 

또다른 방법으로 Symbolic Link를 활용

또는 mklink명령어 사용

출처 : https://zetawiki.com/wiki/%EC%9C%88%EB%8F%84%EC%9A%B0_%EC%8B%AC%EB%B3%BC%EB%A6%AD_%EB%A7%81%ED%81%AC_%EC%83%9D%EC%84%B1

 

이렇게 해놓으면 다음부턴 굳이 백업을 받지 않아도 됨.

 



이전 apache-tomcat 8.5.56 에서도 한글이 깨져 관련 글을 포스팅했었는데, (gubok.tistory.com/500) 이번엔 조금 다른형태로 진행됨.

기존 apache-tomcat 8.5.56 에서는 {TOMCAT_HOME}/conf/logging.properties 의 encoding설정라인을 아예 주석으로 처리해서 한글문제가 해결되었으나 이번 apache-tomcat 9.0.41에서는 해결되지 않았다.

구글링해서 얻은 결론은 EUC-KR로 처리함. ( 환경은 Windows 2012 Server )

 

Encoding전

 

Encoding후

 

EUC-KR로 인코딩이라... 오랫만에 보는 인코딩이라 뭔가 좀 찜찜하다. 



« PREV : 1 : 2 : 3 : 4 : 5 : 6 : 7 : ··· : 128 : NEXT »