2011-06-20 11 views
2

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

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から出てきます(つまり、自分のカスタムSTSクラスでGetOutputClaimsIdentity(...)を呼び出した後に発行されたので、発行されたセキュリティトークンに署名しようとしていますが、そうするために秘密鍵を取得できないため。

秘密鍵がロードされた証明書上に存在することが表示されます。

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

が、それは後に失敗します。私はこれを解決する運がないよ、助けてください!

+0

確認する:mmc証明書スナップインで証明書のプロパティを見ると、「この証明書に対応する秘密鍵がありますか? – nzpcmad

+0

@nzpcmad - 証明書には南京錠があり、証明書をダブルクリックして詳細を表示するとメッセージが表示されます。証明書から作成された.PFXファイルをインポートしました。 –

答えて

1

Geneva(= AD FS 2.0)フォーラムのスレッド"cant use .pfx file for X.509 certificates"のように、報告したのと同じ問題があります。したがって、そこに報告された解決策は、 "X509Certificate2オブジェクトを開始するときにX509KeyStorageFlags.PersistKeySetフラグを指定する"ことです。

+0

私はそのフォーラムのポストを見つけて試しました。それは動作しませんでしたが、私に "秘密鍵が存在しません"というエラーが表示されました。だからイライラする。私はセキュリティトークンを(メッセージセキュリティに依存して)当面は暗号化する必要がなくなり、次のエラーに遭遇します。 –

0

PFXファイルを開くときにパスワードを指定する必要がない場合は、私は驚いています。 X509Certificate2 has overloadsは、文字列またはSecureStringの形式でパスワードを取得します。

+0

私は、パスワードで保護された秘密鍵の有無にかかわらず証明書を試しました - どちらも同じエラーを生成します。 –

関連する問題