RE: OCSP - unable to verify with algorithm SHA256WithRSA signed server certificate - NoSuchAlgorithmException from "BCFIPS" provider

"Sabalpara, Mrugesh" <[email protected]> Tue, 26 Feb 2019 06:26:37 +0000
Newsgroups gmane.comp.encryption.bouncy-castle.devel
Message-ID <MWHPR1601MB1136B5DEBDE6CDE38A7E5687EF7B0@MWHPR1601MB1136.namprd16.prod.outlook.com>
Hi David,


We are using bc-fips-1.0.1.jar & bcpkix-fips-1.0.1.jar. We don’t use bcprov.jar file.
Will it work with current jars ?


Regards,
Mrugesh


From: David Hook <[email protected]>
Sent: Tuesday, February 26, 2019 11:46 AM
To: Sabalpara, Mrugesh <[email protected]>; [email protected]
Subject: Re: [dev-crypto] OCSP - unable to verify with algorithm SHA256WithRSA signed server certificate - NoSuchAlgorithmException from "BCFIPS" provider


CAUTION: External email. Do not click links or open attachments unless you recognize the sender and know the content is safe.


________________________________
Hi Mrugesh,

The algorithm is definitely supported. I suspect something else might be going on - the bcprov jar isn't in the class path as well is it?

Thanks,

David

On 25/2/19 11:41 pm, Sabalpara, Mrugesh wrote:
Hi,

Facing an issue may be known and can straight forward for you☺

I recently start working with bc-fips-1.0.1.jar and tangled in a situation - OCSP validation with certificate signing signature SHA256WithRSA algorithm.

NOTE: - Referring to  :- https://www.bouncycastle.org/fips-java/BCFipsIn100.pdf    [Example 55 – Creating an OCSP Request & Example 56 – Creating an OCSP Response]

Server provides certificate with signature algorithm SHA256WithRSA. Hence passing SHA256WithRSA to fetch DigestCalculatorProvider to get digest and generate CertID while creating OCSP request, which returned  “NoSuchAlgorithmException” exception.

When I saw “No such algorithm exception for SHA256WithRSA”, tried to add it as  below  :-

public static BouncyCastleFipsProvider bc = null;
static {

    bc = new BouncyCastleFipsProvider();
    bc.put("SHA256WITHRSA",PKCSObjectIdentifiers.sha256WithRSAEncryption);
    Security.addProvider(bc);
}

Set “bc” object as provider, to validate server certificate in OCSPRequest and OCSPResponse method.

In OCSPRequest method:-

I used AlgorithmIdentifier to get required algorithm and set into
{
…

DigestCalculatorProvider digCalcProv = new JcaDigestCalculatorProviderBuilder().setProvider(bc).build();

AlgorithmIdentifier algorithmIdentifier = new AlgorithmIdentifier(PKCSObjectIdentifiers.sha256WithRSAEncryption);

CertificateID certId = new JcaCertificateID(digCalcProv.get(algorithmIdentifier), caCert, certToCheck.getSerialNumber());

…
}

In OCSPResponse method:-
{
…

new JcaContentVerifierProviderBuilder().setProvider(bc).build(caCert.getPublicKey())

…
}

org.bouncycastle.operator.OperatorCreationException: exception on setup: java.security.NoSuchAlgorithmException: no such algorithm: SHA256WITHRSA for provider BCFIPS
               at org.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder$1.get(Unknown Source)
               at syslog.OCSPValidator.makeOcspRequest(OCSPValidator.java:62)
………
………..
Caused by: java.security.NoSuchAlgorithmException: no such algorithm: SHA256WITHRSA for provider BCFIPS
               at sun.security.jca.GetInstance.getService(GetInstance.java:101)
               at sun.security.jca.GetInstance.getInstance(GetInstance.java:218)
               at java.security.Security.getImpl(Security.java:724)
               at java.security.MessageDigest.getInstance(MessageDigest.java:275)
               at org.bouncycastle.jcajce.util.ProviderJcaJceHelper.createDigest(Unknown Source)
               at org.bouncycastle.operator.jcajce.OperatorHelper.createDigest(Unknown Source)
               ... 21 more


Please let me know if anything incorrect in understanding.

Thank you.


Regards,
Mrugesh