2012-04-10 2 views
0

저는 GlassFish 3.x에서 실행되는 앱을 가지고 있습니다. https를 통해 원격 서버와 통신합니다. 내 cacerts 파일에서 서버 인증서를 추가했습니다. 내 keystore.jks에서 원격 서버를 실행하는 회사에서 발행 한 개인 키를 추가했습니다. 글래스 피쉬 2.x에서는 훌륭하게 작동하지만, 원격 서버는 내가 가지고있는 키가 무효하다는 불평을 계속합니다.내 앱에서 사용할 비공개 키를 어떻게 알 수 있습니까?

키 저장소에서 키를 제거하면 동일한 오류가 발생합니다. 심지어 응용 프로그램/컨테이너가 내가 필요로하는 키 알 수 있을까 궁금 저를 가지고 키를,로드 아니라면 그것은이다

내 연결 코드는 다음과 같습니다 : 나는 호스트 및 포트를 설정

public class SSLSocket { 

private static Logger logger = LoggerFactory.getLogger(SSLSocket.class); 
private ConnectionProperties connectionProperties; 

public TuSSLSocket(ConnectionProperties connectionProperties) { 
    this.connectionProperties = connectionProperties; 
} 

public SSLSocket getSSLSocket() throws Exception{ 
    SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); 
    SSLSocket socket = (SSLSocket) factory.createSocket(connectionProperties.getHost(), connectionProperties.getPort()); 
    socket.setSoTimeout(90000); 

    return socket; 
} 

} 

그에 따라 키 스토어에서이 별칭을 찾으십시오. 그래서 ... 앱이 어떤 별칭을 가져야하는지 어떻게 알 수 있습니까?

+1

그냥 "내 keystore.jks에 원격 서버를 실행하는 회사에서 발급 한 개인 키를 추가했습니다"라는 메시지가 표시되지 않습니다. 아무도 자신의 개인 키를 제공하지 않습니다. 가지고있는 것은 공개 키입니다. –

+0

... keytool -list etc ...이 (가) 개인 키라고했습니다. – Preston

+0

다른 곳에서 공급받은 비공개 키인 경우 보안을 즉시 호출해야합니다. 개인 키는 둘 이상의 파티에 알려져 있기 때문에 쓸모가 없습니다. 이는 사용자를 의도 한대로 고유하게 식별하는 데 도움이되지 않으며 결과로 발생하는 트랜잭션은 사용자 측에서 부인할 수 없으므로 원격 서버 회사에게 어떤 수준의 보안도 제공하지 않습니다. 자신의 개인 키와 인증서를 생성하고 CA가 서명 한 인증서를 얻어야합니다. – EJP

답변

0

양방향 SSL을 설명하고 재즈가 모두 소모됩니다. 나는 유용한 링크를 찾으려고 노력할 것이다. 그러나 glassfish에 배포 된 응용 프로그램이 SSL (예 : SSL 포트를 통해 구성된 LDAP 서버 영역)을 통해 서버와 통신하는 클라이언트 역할을하는 경우 glassfish 서버의 ID 인증서 (키 저장소의)를 클라이언트로 사용합니다 증명서.

그러나 SSL 핸드 셰이크를 명시 적으로 코딩하는 경우 클라이언트 응용 프로그램에서 키 저장소를 선택하고 핸드 셰이크의 일부로 인증서를 제공해야합니다.

이전 버전의 Glassfish에서 작동하므로 동일한 코드가 효과적입니다. 문제가 구성과 관련이있을 가능성이 큽니다. 나는 cacerts.jks

useful glassfish ssl example

SSL Socket client example

Example of choosing keystore in client.

+0

예제를 가져 주셔서 감사합니다. 이들 중 어떤 것도 앱이 별칭을 찾는 방법을 보여주지 않습니다. – Preston

0

두 가지 방법이 있습니다 당신은 서버의 keystore.jks 일반적으로 다른 서버의 인증서가 신뢰 저장소에 추가에 추가 있었는지에 대해 조금 혼란 스러워요 달성하기 위해 첫 번째 :

admi에서 다음 경로를 엽니 다. n 콘솔 페이지.

  • 구성
  • 클러스터/인스턴스 구성. 당신이 -Dcom.sun.enterprise.security.httpsOutboundKeyAlias ​​=의 s1as

변경의 s1as 값으로 항목의 목록에서 어떤 곳이 줄을 찾을 수

  • JVM 설정
  • JVM 옵션 인증서 별칭을 사용할 수 있습니다.

    다른 옵션은 코드에 시스템 속성을 추가하는 것입니다. System.setProperty ("com.sun.enterprise.security.httpsOutboundKeyAlias", "your certificate alias");

  • 관련 문제