SIGN_NOT_FOUNDは、signtool.exeの「予期しない内部エラー」として


8

私の質問はこれに関連しています。悲しいかな、その質問は別のCA(Symantec)に関するものであり、(Safenetからの)別のハードウェアトークンを使用しています私は提供されましたが、HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providers)の下で独自のプロバイダーを登録していないようです。

certum.plのオープンソースコード署名証明書を使用しています。signtool.exeWindows SDKのを使用していますが10.0.18362.0、次のエラーが(とともにsigntool sign /v /debug)表示されます。

signtool.exe sign /v /debug /a /i Certum /ph /du "https://my.url" /d "short description" /fd sha256 /tr "http://timestamp.digicert.com" /td sha256 "mysoftware.exe"
The following certificates were considered:
    Issued to: Open Source Developer, ...
    Issued by: Certum Code Signing CA SHA2
    Expires:   ...
    SHA1 hash: ...
    Issued to: Open Source Developer, ...
    Issued by: Certum Code Signing CA SHA2
    Expires:   ...
    SHA1 hash: ...
After EKU filter, 2 certs were left.
After expiry filter, 1 certs were left.
After Issuer Name filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
    Issued to: Open Source Developer, ...
    Issued by: Certum Code Signing CA SHA2
    Expires:   ...
    SHA1 hash: ...
Done Adding Additional Store
Error information: "Error: SignerSign() failed." (-1073741275/0xc0000225)
SignTool Error: An unexpected internal error has occurred.

エラーコード0xC0000225は次のとおりNTSTATUSです。

//
// MessageId: STATUS_NOT_FOUND
//
// MessageText:
//
// The object was not found.
//
#define STATUS_NOT_FOUND                 ((NTSTATUS)0xC0000225L)

...完璧な理にかなって、与えられたHRESULTことにより、使用されるようにコードをsigntool.exe1:基礎となるインフラマップ1 NTSTATUS(もちろん場合は、施設コードが与えられ、HRESULTコードが存在するには名前がありませんntstatus.h...私が意味するのレイアウトであるHRESULTNTSTATUS)。

悲しいかな、多くのことはいつでも見つからないかもしれないので、これは私に何も教えてくれません...この執筆の時点で私はまだProcMonを使って自分でそれを絞り込もうとしています。失敗した試みの場合、NAME NOT FOUNDProcMonで592 結果が表示されます。これは上記のNTSTATUSコードに対応しているはずです。それらのほとんどは、レジストリキーと値用です。


signtoolもう一度、完全なコマンドラインを示します。

"C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" sign / v / debug / a / i Certum / ph / du " https://my.url " / d "短い説明" / fd sha256 / tr " http://timestamp.digicert.com " / td sha256 "mysoftware.exe"

...はい、実際にそれを使用していることを確認しましたsigntool.exe...実際、フルパスでx86とx64を試してみました(実際のスクリプトは複雑さの一部をラップPATHし、呼び出すことができるように調整するための環境を準備していますsigntool.exeフルパスなし)。

奇妙なことに、SHA1ダイジェストを使用して署名すると、次のように機能します。

"C:\ Program Files(x86)\ Windows Kits \ 10 \ bin \ 10.0.18362.0 \ x64 \ signtool.exe" sign / v / debug / a / i Certum / ph / du " https://my.url " / d "短い説明" / t " http://timestamp.digicert.com " "mysoftware.exe"

(違いは、欠落/fd sha256/td sha256ていることと、タイムスタンプサービスURLの/t代わりに/tr、つまり異なるプロトコルです)

proCertum CardManagerソフトウェアのバージョンは3.2.0.156で、詳細は次のスクリーンショットのとおりです。

proCertum CardManagerソフトウェアバージョン3.2.0.156

(これは、この記事の執筆時点でCertumのWebサイトから入手できる最新バージョンです。)


その間、次のsigntool.exe(それぞれx86と64)も試してみました:

  • Windows 8.1 SDK
  • Windows 10.0.17763.0 SDK

...同じ結果であり、これを解決する方法について私は困惑しています。



@HansPassant:うん、それは私がリンクした質問です。私の質問の最初の段落を見てください。SafeNetインストーラーのエラーが暗号化プロバイダーの登録(またはスペル)に関するものである場合、Certumが独自のプロバイダーを登録しないという事実は、これがここに当てはまることを除外します。または何が欠けていますか?
0xC0000022L

@HansPassantは、両方のケースでEV証明書が言及されていることを示しています。私の場合でも、証明書は実際にはEVではありません。
0xC0000022L

回答:


3

問題は、デフォルトで正しく設定されていないオプションであることが判明しました(この名前はEV証明書にのみ適用されることを示唆していますが、SHA2ダイジェストを使用するものに適用されるようです)。Certumのサポートに感謝します!

proCertum CardManagerオプションダイアログ

関連するオプションを強調しました。

また、私がしなければならなかったことに注意してください

  1. アプリケーションを終了します(TNAまたは「システムトレイ」から)
  2. プログラムフォルダから昇格したアプリケーションを起動します
  3. チェックボックスをチェック
  4. OKボタンを押してください
  5. (成功)メッセージボックスを閉じます
  6. リブート

...以前に昇格せずに試したところ、プロセスが失敗しました。はい、「シールド」アイコンを見ましたが、アプリケーションには昇格を実行するロジックが含まれていると想定していました(含まれていません)。

再起動後に署名を再試行したところ、カードのPINを要求するのはproCertum CardManagerではなく、Windowsでした。そして、署名は魅力のように働きました。

注意:HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Providersこれらの手順を実行しても、下にはまだエントリがありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.