I'm working on the single sign on project. Does anybody know how to
validate a signed XML against X.509 certificate (public key certificate
is provided) in .NET?
I already tried using the SignXML.CheckSignature() object, but I kept
getting an invalid/false result. The CheckSignature method has no way
for me to specify which certificate to be validated against. Any web
link or sample will be very helpful. Thanks people!
The following my code. The information sent from the client is in
base64 encoding and comply to SAML specification.
=======================================================================
Dim SAMLResponse As String
Dim BC As New ASCIIEncoding
Dim DecodedData() As Byte
Dim sDecodedData As String
SAMLResponse = Request("SAMLResponse")
DecodedData = Convert.FromBase64String(SAMLResponse)
sDecodedData = BC.GetString(DecodedData)
Dim RSA As New RSACryptoServiceProvider
Dim publicKey As String
publicKey = RSA.ToXmlString(False)
RSA.FromXmlString(publicKey)
Dim xmlDocument As New XmlDocument
xmlDocument.PreserveWhitespace = True
xmlDocument.LoadXml(sDecodedData)
Dim signedXml As New SignedXml(xmlDocument)
Dim nodeList As XmlNodeList =
xmlDocument.GetElementsByTagName("ds:Signature")
signedXml.LoadXml(CType(nodeList(0), XmlElement))
If signedXml.CheckSignature(RSA) Then
lblOutput.Text = "Valid"
Else
lblOutput.Text = "Invalid"
End If
Eugene Mayevski - 17 Dec 2006 09:49 GMT
Hello!
You wrote on 15 Dec 2006 10:44:32 -0800:
f> publicKey = RSA.ToXmlString(False)
f> RSA.FromXmlString(publicKey)
And where do you set the actual RSA key?
As I understand the procedure, you need to retrieve one from the certificate
that you are going to use for verification
Alternatively you can check XMLBlackbox at http://www.eldos.com/sbb/net-xml.php
With best regards,
Eugene Mayevski
http://www.SecureBlackbox.com - the comprehensive component suite for
network security