2

XML ドキュメントにデジタル署名しようとしています。そのためには、2 つのオプションがあります。Estonian Certifying Center によって作成されたプログラマー向けのライブラリと、銀行によって作成された Java コードを実行するスクリプトがあります。公式 (Certifying Centre) ライブラリを使用している場合は、少し調整するだけですべてが魔法のように機能しますが、銀行のスクリプトになると暴走し、エラーが発生します。

java.io.IOException: %1 is not a valid Win32 application.
esteid-pkcs11
        at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.connect(Native Method)
        at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.<init>(PKCS11Implementation.java:166)
        at iaik.pkcs.pkcs11.wrapper.PKCS11Connector.connectToPKCS11Module(PKCS11Connector.java:75)
        at iaik.pkcs.pkcs11.Module.getInstance(Module.java:202)
        at client.smartcard.SmartcardHelper.initializePKCS11Module(SmartcardHelper.java:46)
        at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:29)
        at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:21)
        at client.Signer.main(Signer.java:36)
10:03:31 ERROR - Signing failed: PKCS11 initialization failed
java.lang.RuntimeException: PKCS11 initialization failed
        at client.smartcard.SmartcardHelper.initializePKCS11Module(SmartcardHelper.java:52)
        at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:29)
        at client.smartcard.SmartcardHelper.initialize(SmartcardHelper.java:21)
        at client.Signer.main(Signer.java:36)
Caused by: java.io.IOException: %1 is not a valid Win32 application.
esteid-pkcs11
        at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.connect(Native Method)
        at iaik.pkcs.pkcs11.wrapper.PKCS11Implementation.<init>(PKCS11Implementation.java:166)
        at iaik.pkcs.pkcs11.wrapper.PKCS11Connector.connectToPKCS11Module(PKCS11Connector.java:75)
        at iaik.pkcs.pkcs11.Module.getInstance(Module.java:202)
        at client.smartcard.SmartcardHelper.initializePKCS11Module(SmartcardHelper.java:46)
        ... 3 more

Esteid-pkcs11ファイルは国固有の dll ファイルです。同じエラーが発生した問題に対するGoogleでの多くの回答を読みましたが、どの回答もうまくいかないようです。JDK(64ビット)とJRE(32ビット)をインストールしました。.dll私が開こうとしたファイルはおそらく32ビットだと思ったのでJAVA_HOME、32ビットJREを指すようにパスを変更しましたが、次のように言いました

amd 64 ビット プラットフォームで IA 32 ビット .dll をロードできません。

だから私はそれがビットの問題ではないと考えました。環境変数を数時間いじった後、銀行が作成したスクリプトに問題がある可能性があると考えました。そんなことありえますか?そうでない場合、このエラーを引き起こす可能性のある他に何がありますか?

編集:署名にC-libraryを使用しようとしたようですが、動作しますが、Java-libraryを使用するとエラーが発生します。

java.io.IOException: %1 is not a valid Win32 application. opensc-pkcs11.dll

opensc-pkcs11.dll が 64 ビット dll であることは 100% 確信していますが、コンソールが system32 フォルダーにアクセスできないのではないかと考えていました。そんなことありえますか?

4

2 に答える 2

0

おそらくopensc-pkcs11.dllには、同じディレクトリにある他のdllへの参照が含まれています。

Gemalto (Safenet) の crpytoki.dll で同様のエラーが発生しました。解決策は、cryptoki.dll を含むディレクトリを Windows PATH に入れることでした。

于 2019-11-28T15:56:39.730 に答える