Skip to content

Commit

Permalink
[7.x] [RHPAM-4504] Update KeyStoreHelper signature fails on ibm1.8 jd…
Browse files Browse the repository at this point in the history
…k cert… (apache#4662) (apache#4873)

* [RHPAM-4504] Update KeyStoreHelper signature fails on ibm1.8 jdk certification test

* - better writing
  • Loading branch information
tkobayas committed Dec 16, 2022
1 parent f82051f commit 74fa069
Showing 1 changed file with 22 additions and 11 deletions.
33 changes: 22 additions & 11 deletions drools-core/src/main/java/org/drools/core/util/KeyStoreHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
import javax.crypto.SecretKey;

import org.drools.core.RuleBaseConfiguration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.drools.core.util.KeyStoreConstants.KEY_CERTIFICATE_TYPE;
import static org.drools.core.util.KeyStoreConstants.KEY_PASSWORD_TYPE;
Expand Down Expand Up @@ -60,6 +62,8 @@
*/
public class KeyStoreHelper {

private final Logger logger = LoggerFactory.getLogger(KeyStoreHelper.class);

private static final String SHA512WITH_RSA = "SHA512withRSA";
private static final String MD5WITH_RSA = "MD5withRSA";

Expand Down Expand Up @@ -233,19 +237,26 @@ public boolean checkDataWithPublicKey(final String publicKeyAlias,
Signature sig = Signature.getInstance( SHA512WITH_RSA );
sig.initVerify( cert.getPublicKey() );
sig.update( data );
boolean result = false;
try {
return sig.verify( signature );
result = sig.verify(signature); // IBM JDK 1.8 returns false without SignatureException
} catch (SignatureException e) {
if (allowVerifyOldSignAlgo) {
// Fallback for old sign algorithm
sig = Signature.getInstance(MD5WITH_RSA);
sig.initVerify(cert.getPublicKey());
sig.update(data);
return sig.verify(signature);
} else {
throw new RuntimeException("Failed to verify signature. If you call this method for data signed by old Drools version," +
" set system property \"" + KeyStoreConstants.PROP_VERIFY_OLD_SIGN + "\" to true" , e);
}
logger.warn("Exception while verifying signature", e);
}
return result || verifyWithFallbackAlgorithmIfAllowed(cert, data, signature);
}

private boolean verifyWithFallbackAlgorithmIfAllowed(Certificate cert, byte[] data, byte[] signature) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
if (allowVerifyOldSignAlgo) {
// Fallback for old sign algorithm
Signature sig = Signature.getInstance(MD5WITH_RSA);
sig.initVerify(cert.getPublicKey());
sig.update(data);
return sig.verify(signature);
} else {
logger.warn("Failed to verify signature. If you call this method for data signed by old Drools version," +
" set system property \"" + KeyStoreConstants.PROP_VERIFY_OLD_SIGN + "\" to true");
return false;
}
}

Expand Down

0 comments on commit 74fa069

Please sign in to comment.