2
XML署名の証明書が有効かどうかを確認するWCF Webサービスを開発しています。 XMLは、有効で有効なX509証明書で署名されています。 Visual Studio開発環境内でサービスを実行している間、X509Certificate2.Verify()メソッドとX509Chain.Build()メソッドはTRUEを返します。しかし、IISでサービスを公開すると、これらのメソッドはFALSEを返します。私が間違っていることや欠けていることは何ですか?私の検証コードは以下の通りです:WebサービスのX509Certificate2検証
public static void VerifyXml(XmlDocument xDoc)
{
// Create a new SignedXml object and pass it
// the XML document class.
SignedXml signedXml = new SignedXml(xDoc);
// Find the "Signature" node and create a new
// XmlNodeList object.
XmlNodeList nodeList = xDoc.GetElementsByTagName("Signature");
// Load the first <signature> node.
signedXml.LoadXml((XmlElement)nodeList[0]);
IEnumerable<KeyInfoX509Data> x509Data = signedXml.KeyInfo.Cast<KeyInfoX509Data>();
KeyInfoX509Data info = x509Data.First<KeyInfoX509Data>();
X509Certificate2 cert = info.Certificates[0] as X509Certificate2;
bool certIsValid = cert.Verify();
// Here I receive TRUE in development environment and FALSE under IIS
if (!certIsValid)
throw new X509Exception("Invalid certificate");
bool chainIsValid = false;
X509Chain chain = new X509Chain();
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chain.ChainPolicy.UrlRetrievalTimeout = new TimeSpan(0, 1, 0);
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
chainIsValid = chain.Build(cert);
// Here I also receive TRUE in development environment and FALSE under IIS
if (!chainIsValid)
throw new X509Exception("Chain is invalid");
// Check the signature
bool signatureOK = signedXml.CheckSignature(cert, false);
if (!signatureOK)
throw new X509Exception("Signature is invalid");
}
アイデアはありますか? ありがとう
ローカルマシンストアにルート証明書を追加するには、問題を解決しました。 Thaks a lot! –