1

私は以下を使用しています:

  • Windows764ビット
  • JDK764ビット
  • JRE764ビット

新しい面白いJRE764ビットは、Sun PKCS11(パッケージ'sun.security.pkcs11'内にあります)をサポートしなくなりました。そして、大きな問題は、当社の製品のエンドユーザーがJREのバージョンをインストールしている可能性があることです。

したがって、既存のコードを「SunPKCS11」のコードから「IAIKPKCS11ラッパー」に交換する必要があります。IAIKによるラッパーは、次のように簡単に機能します。

(iaik-wrapper.jar)->(iaik-pkcs11-jni.dll)->(pki-token-driver.dll)

PKIトークンドライバのダイナミックリンクライブラリは、PKI USBトークンの製造元から提供されており、実際の名前は「ca2-v34.dll」です。このネイティブドライバをロードする方法は、プログラマーのマニュアルで次のように説明されています。

import iaik.pkcs.pkcs11.*;
...

Module pkcs11Driver;
try {
  pkcs11Driver = Module.getInstance("ca2-v34.dll"); //<--exception!
  pkcs11Driver.initialize(null);

  //test
  System.out.println(pkcs11Driver.getInfo());
}
catch (Exception ex) {
  System.out.println(ex);
}

例外は、上記のコードでマークされた行で発生します。詳細は次のとおりです。java.io.IOException:%1は有効なWin32アプリケーションではありません。ca2-v34.dll

この例外は、IAIKライブラリが.dllファイルを検出したことを意味しますが、どういうわけか互換性がありません。私はこのボトルネックで立ち往生しています。

4

1 に答える 1

1

質問のすぐ下のコメントでEJPが指摘したように、 ca2-v34.dll は 32 ビット dllです。メーカーが提供する USB トークン マネージャーのサンプルは32 ビット全体のソフトウェアであるため、Windows 32 と Windows 64 の両方でこの dll ファイルをロードできます。

JRE のシナリオは異なります。

  • クライアント コンピューターに JRE 32bit がインストールされている場合、 JVMのプロセスは 32bit プロセスであるため、Java アプリケーション (.jar ファイル) は正常に動作します。
  • もう 1 つのケースは、クライアント コンピューターに JRE 64 ビットがインストールされている場合です。この場合の JVM は 64 ビット プロセスであるため、Java アプリケーションは正常に実行できません。Java アプリケーション (.jar ファイル) をロードできますが、ファイル 'ca2- v34.dll' は、この dll ファイルが 32 ビット dll であるためです。
于 2013-01-09T04:39:50.403 に答える