0

PKCS #7で問題が発生し、頭がおかしくなりました。これが事です:

  1. 別のサードパーティ サーバーに要求を送信し、応答として PKCS #7 署名付きトークンを受け取る ASP.NET Web サービスがあります (このトークンがどこから来るかは実際には重要ではありません) 次に、私の Web サービスはトークンの署名 (および有効性) をチェックし、同封されたデータをメソッドを呼び出したユーザーに返します。

  2. Web サービスは、Windows ADユーザー アカウントIIS 6で実行される専用のアプリケーション プールで実行するように構成されています。

  3. 検証を実行するには、次のようにします (署名にはトークンがあります)。

    public static byte[] VerifyAndExtractEnvelopedData(byte[] signature)
    {
        if (signature == null)
            throw new ArgumentNullException("signature");
    
        // Decode the signature
        SignedCms cms = new SignedCms();
        cms.Decode(signature);
        cms.CheckSignature(false);
    
        if (cms.Detached)
            throw new InvalidOperationException("Cannot extract enveloped content from a detached signature.");
    
        return cms.ContentInfo.Content;
    }
    
  4. Web サービス (IIS 6) をデプロイしました。前述の webmethod を実行しようとすると、署名の検証時に次のエラーが表示されます。

    信頼されたルート認証局への証明書チェーンを構築できませんでした

簡単にするために、まったく同じコードで小さな Windows フォーム アプリケーションを作成しました。アプリケーション プールの同じユーザー アカウントを使用して、Web サービスがホストされている同じサーバーに対話的にログインしました。そこで EXE ファイルを実行すると、正常に動作します。つまり、署名を完全に検証できました。IMO、これにより、認証局(CA) 証明書の欠落などの問題が除外されます (実際、署名者の .CER ファイルがあり、Windows で開くと、チェーンに問題がないことがわかります)。

したがって、明らかに唯一の違いは、最初のケースでは私のプロセスが Web サービスであり、2 番目のケースではデスクトップ EXE ファイルであることです。最初のケースで検証を実行できない原因として他に何が考えられますか?

4

1 に答える 1

0

証明書利用者のさまざまな信頼ストアにヒットしている可能性があると思います。証明書ストアを参照してください。

また、関連する証明書を PKIF、PITT、Portecle または同様のツールを使用して、有効性、適切な OID、チェーンなどについて調べてください。

于 2012-06-23T02:47:49.733 に答える