2

調査中の WIF シナリオにカスタム STS を実装しようとしていますが、失敗しています。トークンの署名に使用された証明書から秘密鍵を取得しようとすると失敗します。次の構成で STS を作成します。

var signingCert = new X509Certificate2(@"C:\<path>\MySigningCertificate.pfx");
var config
    = new SecurityTokenServiceConfiguration()
    {
        DisableWsdl = true,
        TokenIssuerName = "Tribold",
        SecurityTokenService = typeof(TriboldSecurityTokenService),
        SigningCredentials = new X509SigningCredentials(signingCert),
        CertificateValidationMode = X509CertificateValidationMode.Custom,
        CertificateValidator = new CertificateValidator()
    };

ただし、WCF 診断ログが構成されていると、サービス トレース ビューアーに次のメッセージが表示されます。

The private key is not present in the X.509 certificate.

これは、コードがカスタム STS から出てくるときに (つまり、GetOutputClaimsIdentity(...)カスタム STS クラスを呼び出した後に) ログに記録されているように見えるため、発行されたセキュリティ トークンに署名しようとして失敗したとしか考えられません。そのための秘密鍵。

ロードされた証明書に秘密鍵が存在するようです。

Debug.Assert(signingCert.HasPrivateKey == true);

しかし、後で失敗します。私はこれを解決する運がありません, 助けてください!

4

2 に答える 2

1

ジュネーブ (= AD FS 2.0) フォーラムの「X.509 証明書に .pfx ファイルを使用できない」というスレッドが、報告したのと同じ問題を扱っているようです。したがって、そこで報告された解決策が機能する可能性があります。これは、「オブジェクトX509KeyStorageFlags.PersistKeySetを開始するときにフラグを指定する」ことです。X509Certificate2

于 2011-06-20T18:18:47.110 に答える
0

PFXファイルを開くときにパスワードを指定する必要がなかったとしたら驚きます。X509Certificate2には、文字列またはSecureStringの形式でパスワードを受け取るオーバーロードがあります。

于 2011-06-21T07:39:50.300 に答える