X509Certificate (서명을 확인해야하는 .p7b 파일)을 사용하여 XML (XMLDSig Envelope)에 서명하려면 C# (4.0)이 필요합니다. 보안 상 경험이 없습니다. 내 지식은 암호에 관한 몇 가지 기본 개념을 멈 춥니 다. 여기 X509Certificate 및 XmlDsig
내가 무엇을했는지 있습니다 : 인증서 - 현재 사용자 - 신뢰할 수있는 루트 인증 :1) 나는 인증서를 설치했습니다. 내가 성공적으로이 코드로 인증서를로드 .NET에서
2) : 나는 다음 코드를 사용하여 서명을 생성하기 위해 인증서의 공개 키를 사용하려고
X509Store store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
try
{
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySubjectName, certName, false);
if (certs.Count == 0)
return null;
return certs[0];
}
finally
{
store.Close();
}
3); 서명을 계산할 때
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
var reader = new StringReader(xml);
doc.Load(reader);
var signedXml = new SignedXml(doc);
X509Certificate2 certificate = this.GetCertificateFromStore(certName); // the previous code
signedXml.SigningKey = (RSACryptoServiceProvider)certificate.PublicKey.Key;
var reference = new Reference();
reference.Uri = "";
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
signedXml.AddReference(reference);
signedXml.ComputeSignature(); // exception!!!
var element = signedXml.GetXml();
doc.AppendChild(doc.ImportNode(element, true));
는하지만 난 예외가 : "개체는 키 쌍의 공개 절반을 포함하는 개인 키도 제공해야합니다.."
인증서에서 HasPrivateKey 속성을 검사했는데 false입니다. 개인 키가 없어야한다는 사실을 (기본) 이해하면 공개 키를 사용하여 서명을 만들 수 있어야합니다.
내가 무엇이 누락 되었습니까?
미리 감사드립니다.
제 경우에는 xml을 고객 서비스에 보내야하는 응용 프로그램이 있습니다. 고객이 보낸 사람 (나)을 신뢰할 수 있는지 (또는 다른 응용 프로그램) 신뢰할 수 있는지 알고 싶다고 가정합니다. 그들은 나에게 XML에 서명하는 데 사용되는 .p7b를주었습니다. 개인 키 (고객이 신뢰할 수있는 파트너와 공유 할 수있는 키)를 요청해야하는지 아니면 공용 키만 사용하여 동일한 작업을 얻을 수 있다고 생각하십니까? – SkyG
@SkyG 개인 키가있는 인증서를 가지고 있어야하며 개인 키가없는이 인증서를 고객에게 제공해야합니다. 고객이 인증서를 제공하고이 인증서를 사용하여 데이터에 서명하도록 요청한 경우 이는 다음 중 하나를 의미 할 수 있습니다. (a) 고객이 PKI가 작동하는 방식을 이해하지 못했거나 (b) 고객이 * 데이터를 암호화합니다 (고객이 보안에 유능하지 않음을 다시 말함). 자세히 ... –
@SkyG 서명에 사용한 인증서가 사용자에게 속하는지 확인하려면 고객이 인증서의 유효성을 검사합니다. 이것은 대부분의 소프트웨어에서 자동화 된 복잡한 절차입니다. 인증서가 잘 알려진 인증 기관에 의해 서명 된 경우 작동합니다. 예 : http://www.globalsign.com/document-security-compliance/adobe-cds/에서 PDF 서명 인증서를 구매하면 고객의 Adobe Reader는이 인증서를 자동으로 올바르게 검증합니다.XML에서도 마찬가지입니다. –