RFR: 8271199: Mutual TLS handshake fails signing client certificate with custom sensitive PKCS11 key

Xue-Lei Andrew Fan xuelei at openjdk.java.net
Wed Oct 20 17:26:06 UTC 2021


On Fri, 23 Jul 2021 10:33:14 GMT, Alexey Bakhtin <abakhtin at openjdk.org> wrote:

> Hello,
> 
> Could you please review the small patch for the issue described in JDK-8271199: Mutual TLS handshake fails signing client certificate with custom sensitive PKCS11 key
> 
> I suggest updating the RSAPSSSignature.isValid() method to verify if provided key components can be applied to SunRSASign implementation. 
> If not applied, implementation can try to select signer from other providers
> 
> Regards
> Alexey

It's a good catch.  Thank you for the fix.

src/java.base/share/classes/sun/security/rsa/RSAPSSSignature.java line 248:

> 246:                              crtKey.getCrtCoefficient().signum() == 0 ||
> 247:                              crtKey.getPublicExponent().signum() == 0 )))) ||
> 248:                 (rsaKey instanceof RSAPublicKey rsaPubKey &&

Mixing the public key and private key together in one method may be not straightforward enough to logics like this update.  What do you think it we have two isvalid() method, one for private key and one for public key?

src/java.base/share/classes/sun/security/rsa/RSAPSSSignature.java line 250:

> 248:                 (rsaKey instanceof RSAPublicKey rsaPubKey &&
> 249:                     rsaPubKey.getPublicExponent().signum() == 0)) {
> 250:                 throw new InvalidKeyException("Invalid key attributes");

The exception description may be confusing to users.  I'm not sure if the checking could be simplified and make this exception message better matching the problems.

src/java.base/share/classes/sun/security/rsa/RSAPSSSignature.java line 251:

> 249:                     rsaPubKey.getPublicExponent().signum() == 0)) {
> 250:                 throw new InvalidKeyException("Invalid key attributes");
> 251:             }

What's the motivation to check the signum?

-------------

PR: https://git.openjdk.java.net/jdk/pull/4887



More information about the security-dev mailing list