2017-02-23 3 views
1

Restful API에 액세스하는 데 필요한 Java KeyStore에 내 인증서가 저장되어 있습니다. 이 API에 액세스하려면 Java에서 구현할 JWT (Json Web Token)를 만들어야합니다. JWT 생성을 위해 주어진 개인 키를 사용하여 페이로드에 서명해야합니다. 그래서, 제가 .jks에서 개인 키를 가져, IS하고있는 중이 야 것은이 코드 조각, 그것은 "NULL"값으로 개인 키를 반환java - jks (개인 키 저장소)에서 개인 키 가져 오기

FileInputStream is = new FileInputStream("src/main/resources/file.jks"); 
      KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
      keystore.load(is, "password".toCharArray()); 
PrivateKey privateKey = (PrivateKey) keystore.getKey("key", "".toCharArray()); 
JWTClaimsSet claimsSetOne = new JWTClaimsSet.Builder() 
       .subject("alias") 
       .issueTime(new Date(123000L)) 
       .issuer("https://issuer") 
       .audience("https://audience") 
       .build(); 

JWSSigner signer = new RSASSASigner(privateKey); 
SignedJWT signedJWT = new SignedJWT (new JWSHeader(JWSAlgorithm.RS256), claimsSetOne); 
signedJWT.sign(signer); 
String orderOne = signedJWT.serialize(); 

이제 내 코드에 파일. 내 코드가 실패하게됩니다. 그렇다면 JWT를 생성하기 위해 페이로드에 서명하기 위해 개인 키를 읽을 수 있도록 제 코드가 될 수 있습니다. 또는 다른 목적을 달성 할 수있는 다른 방법. 미리 감사드립니다.
편집 : 그런 다음 내가이 명령을 시도했다가,

File file = new File("src/main/resources/sho1.jks"); 
InputStream is = new FileInputStream(file); 
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
String password = "sho123"; 
keystore.load(is, password.toCharArray()); 

KeyStore.PrivateKeyEntry keyEnt = 
    (KeyStore.PrivateKeyEntry) keystore.getEntry("sho",new KeyStore.PasswordProtection(password.toCharArray())); 
PrivateKey privateKey = keyEnt.getPrivateKey(); 

이 Invalid_Signature로 나에게 오류를 제공합니다.

+0

키 스토어에서 키를 어떻게 가져 왔습니까? 키를 가져올 때 사용되는 "키"가 별칭입니까? – JEY

+0

.pfx 파일이 있습니다. 그런 다음 keytool 명령을 사용하여이를 Java 키 저장소에 가져 왔습니다. –

+0

"키"가 개인 키의 별칭인지 확인하십시오. – JEY

답변

1

JAVA 코드의 구현에는 아무런 문제가 없습니다. 이 코드는 정상적으로 작동합니다. INVALID_SIGNATURE로 받고있는 오류는 JKS 때문입니다. 가져온 인증서가 올바르지 않습니다. 즉 올바른 인증서 경로가 없습니다. 올바른 방법으로 가져 오기를 시도했지만 작동합니다. JKS에서 올바른 지문을 얻으려면 올바른 유형의 키 쌍으로 인증서를 가져 오는 중입니다. 감사합니다.