ページの先頭行へ戻る
Interstage Application Server V13.1.0 使用上の注意
FUJITSU Software

2.12.26 Solaris固有の注意事項

PKCS#11プロバイダ使用時の不具合について

特定のハードウェア(*1)とOS(*2)を使用時、java.securityパッケージAPIでjava.security.ProviderExceptionが発生、またはkeytool、jarsignerコマンドが正しく実行されない場合があります。

また、java.net.HttpURLConnectionでssl/tls通信をした場合、および、java.securityを内部で利用している以下のパッケージAPIでも発生する可能性があります。

(*1) MAU(Modular Arithmetic Unit)を実装しているハードウェアが該当します。

(*2) Oracle Solaris 11.0 および Oracle Solaris 11.1が該当します。

java.securityパッケージAPI

Exception in thread "main" java.security.ProviderException: update() failed
        at sun.security.pkcs11.P11Digest.engineUpdate(P11Digest.java:235)
        at java.security.MessageDigest$Delegate.engineUpdate(MessageDigest.java:601)
        at java.security.MessageDigest.update(MessageDigest.java:328)
        at java.security.DigestInputStream.read(DigestInputStream.java:163)
        at java.io.FilterInputStream.read(FilterInputStream.java:107)
        at MDTest.main(MDTest.java:10)
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_DATA_LEN_RANGE
        at sun.security.pkcs11.wrapper.PKCS11.C_DigestUpdate(Native Method)
        at sun.security.pkcs11.P11Digest.engineUpdate(P11Digest.java:227)
        ... 5 more

Oracle Solaris 11.1では、UnrecoverableKeyExceptionが起因となるメッセージが出力される場合があります。

Exception in thread "main" java.io.IOException: Keystore was tampered with, or password was incorrect
        at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:792)
        at sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:57)
        at sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224)
        at sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:71)
        at java.security.KeyStore.load(KeyStore.java:1445)
        at ReadCAcerts.main(ReadCAcerts.java:14)
Caused by: java.security.UnrecoverableKeyException: Password verification failed
        at sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:790)
        ... 5 more

keytool

  • -listオプション指定時

    Your keystore contains 0 entries
  • -delete/-exportcertオプション指定時

    keytool error: java.lang.Exception: Alias <xxxxx> does not exist

jarsigner

jarsigner error: java.security.ProviderException: update() failed
回避方法

本不具合が発生した場合、以下のどちらかの方法で回避してください。

  • OSのカーネル暗号化フレームワークのpkcs11_kernelを無効にする

    Oracle Solarisドキュメントのcryptoadmおよびpkcs11_kernelを参照して無効化してください。

    使用例

    cryptoadm uninstall provider=/usr/lib/security/\\$ISA/pkcs11_kernel.so
  • PCKS#11プロバイダを無効にする

    以下のドキュメントを参照して無効化してください。

    https://docs.oracle.com/javase/jp/8/docs/technotes/guides/security/p11guide.html#Disable

SSL使用時のjavax.net.ssl.SSLExceptionについて

SSL使用時、使用するハードウェア・OSのパッチレベルによって、SSLExceptionが発生する場合があります。

例えば、以下のようなExceptionが発生する場合があります。

   javax.net.ssl.SSLException: java.lang.RuntimeException: Could not generate secret
        at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)
        at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1842)
        at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1825)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1346)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323)
        at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563)
        at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(HttpsURLConnectionImpl.java:153)
        at com.sun.enterprise.admin.remote.RemoteAdminCommand.doHttpCommand(RemoteAdminCommand.java:665)
        ... 16 more
Caused by: java.lang.RuntimeException: Could not generate secret
        at sun.security.ssl.ECDHCrypt.getAgreedSecret(ECDHCrypt.java:99)
        at sun.security.ssl.ClientHandshaker.serverHelloDone(ClientHandshaker.java:933)
        at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:285)
        at sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)
        at sun.security.ssl.Handshaker.process_record(Handshaker.java:804)
        at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1016)
        at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312)
        at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339)
        ... 21 more
Caused by: java.security.InvalidKeyException: Could not derive key
        at sun.security.pkcs11.P11ECDHKeyAgreement.nativeGenerateSecret(P11ECDHKeyAgreement.java:207)
        at sun.security.pkcs11.P11ECDHKeyAgreement.engineGenerateSecret(P11ECDHKeyAgreement.java:174)
        at javax.crypto.KeyAgreement.generateSecret(KeyAgreement.java:632)
        at sun.security.ssl.ECDHCrypt.getAgreedSecret(ECDHCrypt.java:97)
        ... 28 more
Caused by: sun.security.pkcs11.wrapper.PKCS11Exception: CKR_ARGUMENTS_BAD
        at sun.security.pkcs11.wrapper.PKCS11.C_DeriveKey(Native Method)
        at sun.security.pkcs11.P11ECDHKeyAgreement.nativeGenerateSecret(P11ECDHKeyAgreement.java:195)

この場合、以下のプロパティをjavaコマンドに指定してください。

-Dcom.sun.net.ssl.enableECC=false

鍵ペアの作成時間について

以下の機能により、RSAアルゴリズムで鍵ペアを作成する場合に、数分以上の作成時間がかかることがあります。

鍵ペアを作成する処理に時間がかかっている場合には、暗号アルゴリズムおよびkeysizeが意図した設定になっているか確認してください。

アプリケーションで鍵ペアを作成する場合は、作成時間の検証を行い、時間がかかる場合があることを考慮して、アプリケーションを作成してください。