2017-02-23 42 views
1

私は、安心なAPIにアクセスするために必要なJava KeyStoreに保存された証明書を持っています。このAPIにアクセスするには、Javaで実装しているJWT(Json Web Token)を作成する必要があります。 JWTを生成するために、私は与えられた秘密鍵でペイロードに署名する必要があります。 だから、私がやっていることは.jksから秘密鍵をインポートし、である今、私のコードjava - jks(Javaキーストア)から秘密鍵をインポートする必要があります

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

あなたは秘密鍵のエイリアスが "key"であると確信していますか? – JEY

答えて

1

JAVAコードの実装には何も問題ありません。このコードは正常に動作します。 INVALID_SIGNATUREとして取得したエラーは、JKSによるものです。インポートした証明書は適切ではありません。つまり、正しい証明書パスがありません。私は正しい方法をインポートしようとしたが、それは動作します。 このタイプのシナリオでは、正しいキーペアで証明書をインポートして、JKSで正しい指紋を取得していることを確認してください。 ありがとうございます。

関連する問題