한 서버의 일부 데이터에 개인 키로 서명하고 해당 공용 키가있는 다른 서버의 서명을 확인하려는 아키텍처가 있습니다. 내 첫 번째 서버에서 데이터에 서명하고 두 번째 서버에서 동일한 데이터를 확인하는 Java 코드가 OpenSSL 셸을 사용하고 있습니다. 아무 래도 이것을 구현할 수 없으며 두 번째 서버에서 확인이 실패합니다. 디버깅하려면 첫 번째 서버에서 사용한 것과 동일한 개인 키를 사용하여 두 번째 서버에서 데이터에 서명하고 두 가지 서명을 모두 비교하기로 결정했습니다. 두 서버가 서로 다른 서명을 생성하는 것 같습니다.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 -
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는 기본적으로 끝에 새 줄을 추가합니다. 'echo -n'은 새로운 라인을 추가하지 않습니다. –