私は必要なものを見つけました。 http://www.dotnetmonster.com/Uwe/Forum.aspx/dotnet-security/2875/Manually-computing-sha1-digest-of-reference-containing
コードを追加するだけです。 X509ChainElement.Certificate.GetSerialNumberString()は私に必要なものを与え、何も計算する必要はありません。ここで
は、私は今、私はそれが正しいだとは思わない
public static XmlElement GenerateSignature(XmlElement xmlToSign, StoreName storeName, StoreLocation storeLocation, X509Certificate2 certificate, string referenceID)
{
SignedXml signedXml = new SignedXml(xmlToSign);
signedXml.SignedInfo.CanonicalizationMethod = SignedXml.XmlDsigExcC14NTransformUrl;
signedXml.SigningKey = certificate.PrivateKey;
Reference tRef = new Reference(referenceID);
XmlDsigExcC14NTransform env = new XmlDsigExcC14NTransform();
tRef.AddTransform(env);
signedXml.AddReference(tRef);
KeyInfo keyInfo = new KeyInfo();
X509Chain x509Chain = new X509Chain();
x509Chain.Build(certificate);
foreach (X509ChainElement element in x509Chain.ChainElements)
{
KeyInfoX509Data x509Data = new KeyInfoX509Data(element.Certificate);
string issuer = element.Certificate.Issuer;
x509Data.AddIssuerSerial(issuer, element.Certificate.GetSerialNumberString());
keyInfo.AddClause(x509Data);
}
signedXml.KeyInfo = keyInfo;
signedXml.ComputeSignature();
XmlElement xmlDsig = signedXml.GetXml();
return xmlDsig;
}
を使用しているコードです。私が使用している証明書のシリアル番号は1f676103341d33a84aee2e91601886ddです。この番号は大きすぎて受け入れられません。 –
@DustinDavisあなたが提示したのは、そうでなければバイナリ値のbase64でエンコードされたテキスト表現です。そして答えを書く前に私のソースコードをチェックしました;) –
Base64、なぜ私はそれを見ませんでしたか?さて、私はちょうど怠惰になり、尋ねられます、デコードされた価値は何ですか? –