nss-3.13.6 ビルドからコンパイルされた nsscapi.dll を使用して、ソリューションをまとめることができました。次に、アプリケーション全体で使用するために、追加のライブラリ依存関係を nss-3.20 ビルドにコピーしました。
コードの一部に署名するための nsscapi.dll は、NSS の基本的な PKCS11 から Capi モジュールへのインターフェイスです。どうやらメモリ リークの問題があるようですが、私の NSS の使用範囲は単に XPI ファイルに時々署名することなので、そのモジュールを時々再起動しても問題ありません。
解決策には、mozilla-build を使用してビルドされた nss-3.20 と、このパッケージの「nss」サブフォルダー内から「make nss_build_all」が含まれます。
Visual Studio C++ Redistributable 2015 x86 バージョン (このプロジェクトでは 64 ビットが機能しないため、32 ビット)。
Windows への Thales CAPI インターフェイス (はい、直接 PKCS11 モジュールがありますが、カスタマイズされた環境では CAPI と Java キーストアのみがオプションであるため、Thales PKCS11 モジュールは使用しませんでした)
PATH 環境変数は、NSS ビルド内の bin および lib フォルダーを指すように変更されました。
nss-3.20\dist\WIN95xxx\lib\ フォルダにある nsscapi.dll は、「modutil」を使用して NSS ビルドにロードされました。
modutil -dbdir "c:\apps\certs" -add "capi" -libfile "C:\Apps\nss-3.20\dist\WIN954.0_DBG.OBJ\lib\nsscapi.dll" -mechanisms RSA:DSA:RC2:RANDOM
コード署名証明書を CAPI に入力するように Thales を既に構成していたので、CAPI にコード署名証明書が既にありました。
現在のユーザーの「個人用」証明書ストアを表示するには、mmc.exe で「証明書」スナップインを使用する必要がありました。次に、使用したいコード署名証明書の「わかりやすい」名前を「test」などの意味のある名前に変更します。これは、NSSCAPI モジュールが、可視性を持つリスト内でその証明書を一意に識別できるようにするためです。
テスト コード署名証明書の 1 つのフレンドリ名を変更するステップの後、NSS サインツールを使用して、使用可能な証明書のリストを表示しました。
signtool -d "c:\apps\certs" -L
「test.xpi」ファイルを「c:\apps\certs」の「test」サブフォルダーに解凍しました。これは、作成したばかりのサブフォルダー名です。必要なものを使用できます。
私のリストにはエントリが含まれていました:
* は、NSS でのコード署名に使用できる有効な証明書であることを示します
次に、signtool を使用して、テスト XPI ファイルのコードに署名しました。
signtool -d "C:\Users\mlawson\AppData\Roaming\Mozilla\Firefox\Profiles\4jnnnb1y.default" -k "Microsoft Certificate Store":"test" test/
成功して!
この回答の書式設定がオフになっている場合は、事前にお詫び申し上げます。スタック オーバーフローへの投稿と、投稿への回答の両方を行ったのはこれが初めてです (自分自身の投稿であっても)。NSS の構築などのより大きな「方法」のいくつかは Mozilla のサイトで既に文書化されているため、この投稿では簡潔にするために高レベルの手順のいくつかをざっと説明しました。Thales に関連する構成は Thales によって文書化されていますが、CAPI インターフェイスの私のユースケースはカスタムで独自のものであるため、構成方法の説明には関係ありません。しかし、nsscapi.dll とこのソリューションを使用するという全体的な概念は、MSCAPI に結びつくものすべてに実際に適用され、NSS でそれを使用できることは便利です。nsscapi.dll は、firefox の「セキュリティ デバイス」にモジュールとしてロードすることもできるため、firefox は CAPI も使用できますが、正確にはわかりません...