私はあるサーバー上のデータに秘密鍵で署名し、それぞれの公開鍵で別のサーバー上の署名を検証するアーキテクチャを持っています。最初のサーバーでデータに署名するためのJavaコードがあり、2番目のサーバー上の同じデータの検証にはOpenSSLシェルが使用されています。どうにか私はこれを実装することができません、私の検証は2番目のサーバーで失敗します。 デバッグするには、最初のサーバーで使用したのと同じ秘密キーを使用して2番目のサーバーでデータに署名し、両方の署名を比較することにしました。両方のサーバーが異なる署名を生成するようです。JAVAとOpenSSLのCLIで署名が異なる
まずサーバー上の署名の生成 -
`String My_Message = "This is Sample Text";
//Get Key from file tkt_privkey_rsa.pem
PrivateKey priv = loadPrivateKey();
// Compute digest
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] digest = sha1.digest(My_Message.getBytes());
//Prepare signature.
Signature sign = Signature.getInstance("SHA1withRSA");
sign.initSign(priv);
sign.update(digest);
//Sign the data with private key.
byte[] realSig = sign.sign();
//encode Signature
String encodedSig = Base64.getEncoder().encodeToString(realSig);
System.out.println("Signature Generated -\n"+encodedSig);
return encodedSig;
出力 - Signature Generated - Aap+/3SvcXs/pCsSnih+MDjoMU9GdWSkPsQ8DSELpxKUhHNwKneKi8NkIzy0Hrw9GGvGfeWUTzZhg1XWYcOso4oRqN6kWyX5BLAbdDV+uncmv0kFqp5PlRobNpjPgqdvjp6vrME7HGN4yLW0eIN1alOBYRFPzS/J4O7Ds0LzRILCmToo4dhGy/DI109CdVSdNQdzuGJ4bZoTGnRiXKmupUf3arJAq+zRCtIFd/k4LCVr9tZQIjOgkpjOForjbsgkXnFrq8WAop6f9qk3cb9tJuExzqdi5LhjplO5xm8VjxqEkwB/HI+3aiF0xzgzMf6DrUyCUQx20ewWaaOubBonvg==
OpenSSLを使用して、第2のサーバ -
echo "This is Sample Text"| openssl dgst -sha1 -sign tkt_privkey_rsa.pem | openssl enc -base64 -A
出力 - nyGcKeXHTK85/MuydT9Y/cd/rbR1ojAQmfFiVvDvEs46qOhIFAv8H4kbaQO63TUyXFlKV1nTiHaPrBnBfW2iKZXSDrcThO3R5znYwvA1RamxmHz5OVRQjGzBdStO43pRML4xGpa9keBj4RCEFM1NlDot4IUrVenyerQhEnymTaaVamIVmVyxYpm2/9b85umqXo/BsATKP174Amqd52X+ED1Cr/CbXVmErvOmxjMdPm9iEYgnWnRc74z6MQzt62gcP3uHuaFlR3U0dRNq51Vr1Z9vZ44NILSRqMZMIU//XZ7bwnnoraj3LeJ9pPzTNdN2Wv3BOYyFXxBi08O/Q517GA==
'echo -n"を試してくださいこれはサンプルテキスト "です。エコーはデフォルトで最後に新しい行を追加します。 'echo -n'は新しい行を追加しません。 –