Using NSS 3.20 built on Windows, using it with Java 8 for SSL connections from 
thick client to FIPS-enabled server. It fails to establish a connection, 
generating the following exception:

Caused by: javax.net.ssl.SSLKeyException: RSA premaster secret error
        at 
sun.security.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:86)
        at 
sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:906)

Caused by: java.security.NoSuchAlgorithmException: no such algorithm: 
SunTls12RsaPremasterSecret for provider SunPKCS11-nss-fips
        at sun.security.jca.GetInstance.getService(GetInstance.java:101)
        at javax.crypto.JceSecurity.getInstance(JceSecurity.java:109)
        at javax.crypto.KeyGenerator.getInstance(KeyGenerator.java:303)
        at sun.security.ssl.JsseJce.getKeyGenerator(JsseJce.java:274)
        at 
sun.security.ssl.RSAClientKeyExchange.<init>(RSAClientKeyExchange.java:77)

The error occurs after client and server agree to use the 
TLS_RSA_WITH_AES_128_CBC_SHA256 cipher. The client can't encrypt the 
pre-master-secret.

The list of services and algorithms for the provider does not include the 
SunTls12RsaPremasterSecret:

DEBUG - NSSConfigurationHandler: NSS Provider successfully instantiated
DEBUG - AFTER loading the NSS provider
DEBUG - Provider: SunPKCS11-nss-fips
  Service: Mac HmacSHA1
  Service: SecretKeyFactory DES
  Service: MessageDigest SHA-384
  Service: Signature SHA256withECDSA
  Service: KeyPairGenerator DSA
  Service: KeyFactory EC
  Service: KeyFactory DSA
  Service: KeyPairGenerator DH
  Service: MessageDigest MD5
  Service: KeyGenerator SunTlsPrf
  Service: KeyFactory DH
  Service: Cipher AES/ECB/PKCS5Padding
  Service: Signature MD2withRSA
  Service: AlgorithmParameters EC
  Service: Signature SHA224withECDSA
  Service: Cipher DES/CBC/PKCS5Padding
  Service: Cipher DESede/CBC/NoPadding
  Service: Signature SHA1withRSA
  Service: SecretKeyFactory AES
  Service: MessageDigest SHA-256
  Service: Cipher AES/ECB/NoPadding
  Service: Mac HmacMD5
  Service: Cipher AES_128/ECB/NoPadding
  Service: MessageDigest MD2
  Service: Signature SHA1withECDSA
  Service: Signature SHA512withRSA
  Service: KeyPairGenerator EC
  Service: Cipher DES/ECB/NoPadding
  Service: MessageDigest SHA-512
  Service: Signature RawDSA
  Service: SecretKeyFactory ARCFOUR
  Service: Signature SHA384withRSA
  Service: MessageDigest SHA1
  Service: Mac HmacSHA256
  Service: KeyGenerator DES
  Service: Cipher DESede/ECB/NoPadding
  Service: KeyAgreement DH
  Service: Cipher DES/ECB/PKCS5Padding
  Service: Mac HmacSHA512
  Service: Mac HmacSHA224
  Service: Signature SHA256withRSA
  Service: Signature NONEwithECDSA
  Service: Cipher RSA/ECB/NoPadding
  Service: Cipher AES_256/CBC/NoPadding
  Service: Cipher AES/CBC/PKCS5Padding
  Service: Cipher DES/CBC/NoPadding
  Service: KeyGenerator SunTlsKeyMaterial
  Service: Cipher ARCFOUR
  Service: KeyGenerator DESede
  Service: MessageDigest SHA-224
  Service: Cipher AES/CBC/NoPadding
  Service: Signature SHA384withECDSA
  Service: Cipher DESede/CBC/PKCS5Padding
  Service: KeyAgreement ECDH
  Service: Cipher AES_192/ECB/NoPadding
  Service: Cipher RSA/ECB/PKCS1Padding
  Service: Signature SHA512withECDSA
  Service: Cipher AES_128/CBC/NoPadding
  Service: KeyGenerator SunTlsMasterSecret  <<<<<<<<<<<
  Service: Signature MD5withRSA
  Service: Mac HmacSHA384
  Service: Cipher AES_256/ECB/NoPadding
  Service: SecretKeyFactory DESede
  Service: KeyPairGenerator RSA
  Service: Signature SHA224withRSA
  Service: Mac SslMacSHA1
  Service: KeyFactory RSA
  Service: KeyGenerator ARCFOUR
  Service: Cipher AES/CTR/NoPadding
  Service: Signature DSA
  Service: Cipher AES_192/CBC/NoPadding
  Service: KeyGenerator SunTlsRsaPremasterSecret  <<<<<<<<<<<
  Service: Cipher DESede/ECB/PKCS5Padding
  Service: KeyGenerator AES
  Service: Mac SslMacMD5
  Service: SecureRandom PKCS11
  Service: KeyStore PKCS11

Code that instantiates the Provider:

InputStream nssConfigStream = new 
ByteArrayInputStream(nssConfig.getBytes(StandardCharsets.UTF_8)); 
Class<Provider> clas = (Class<Provider>) 
Class.forName("sun.security.pkcs11.SunPKCS11");
Constructor<Provider> constructor = clas.getConstructor(new 
Class[]{InputStream.class});
Provider provider = (Provider)constructor.newInstance(nssConfigStream);


Is there some configuration item, etc., that I'm missing?

Thanks!
Ernie
-- 
dev-tech-crypto mailing list
dev-tech-crypto@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-tech-crypto

Reply via email to