2017-02-23 89 views
1

У меня есть сохраненный мой сертификат в Java KeyStore, который необходим для доступа к Restful API. Чтобы получить доступ к этому API, мне нужно создать JWT (Json Web Token), который я реализую на Java. Для генерации JWT мне нужно подписать полезную нагрузку с помощью данного закрытого ключа. Итак, что я делаю, импортировать закрытый ключ из файла .jks в мой кодjava - нужно импортировать закрытый ключ из jks (java keystore)

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. Или любая другая альтернатива для достижения такой же. Спасибо заранее.
Edit: Тогда я попробовал эту команду,

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 keystore. –

+0

И вы уверены, что «ключ» - это псевдоним вашего закрытого ключа? – JEY

ответ

1

Ничего плохого в реализации кода JAVA. Этот код работает отлично. Ошибка, которую я получаю как INVALID_SIGNATURE, связана с JKS. Сертификат, который я импортирую, не является правильным, т. Е. У него нет правильного пути сертификата. Я попытался импортировать правильный путь, тогда он работает. Итак, убедитесь, что в этом типе сценария вы импортируете сертификат с правильной ключевой парой, чтобы получить правильный отпечаток в JKS. Спасибо всем.

 Смежные вопросы

  • Нет связанных вопросов^_^