Author: atsushi
Date: 2006-12-05 11:30:07 -0500 (Tue, 05 Dec 2006)
New Revision: 69051
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
Log:
2006-12-05 Atsushi Emomoto <[EMAIL PROTECTED]>
* WSSecurityTokenSerializer.cs :
Added EncryptedKeyIdentifier clause writer.
Fixed thumbprint writer. WS-Security X509 Certificate Token Profile
does allows direct cetificate info only with IssuerSerial.
* Constants.cs : added WS-Security X509 thumbprint identifier
value type.
* MessageSecurityUtility.cs : u:Timestamp will be encrypted/signed,
thus move it in front of encryption/signing.
* WSSecurityTokenSerializerTest.cs : added test for
X509ThumbprintKeyIdentifierClause writer. Removed some NotWorking.
Modified: trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
===================================================================
--- trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
2006-12-05 16:27:05 UTC (rev 69050)
+++ trunk/olive/class/System.ServiceModel/System.ServiceModel/ChangeLog
2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,8 @@
+2006-12-05 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * Constants.cs : added WS-Security X509 thumbprint identifier
+ value type.
+
2006-12-04 Atsushi Enomoto <[EMAIL PROTECTED]>
* EnvelopeVersion.cs : added Soap12UltimateReceiver to be used in
Modified: trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs
===================================================================
--- trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs
2006-12-05 16:27:05 UTC (rev 69050)
+++ trunk/olive/class/System.ServiceModel/System.ServiceModel/Constants.cs
2006-12-05 16:30:07 UTC (rev 69051)
@@ -39,6 +39,8 @@
public const string WSSX509Token =
"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3";
+ public const string WssX509ThumbptintValueType =
"http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1";
+
public const string XmlDsig =
"http://www.w3.org/2000/09/xmldsig#";
public const string WSSSamlToken =
"http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV1.1";
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
2006-12-05 16:27:05 UTC (rev 69050)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/ChangeLog
2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,8 @@
+2006-12-05 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * MessageSecurityUtility.cs : u:Timestamp will be encrypted/signed,
+ thus move it in front of encryption/signing.
+
2006-12-04 Atsushi Enomoto <[EMAIL PROTECTED]>
* TransactionFlowBindingElement.cs : OnOpen()/OnClose() should not
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
2006-12-05 16:27:05 UTC (rev 69050)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Channels/MessageSecurityUtility.cs
2006-12-05 16:30:07 UTC (rev 69051)
@@ -120,7 +120,7 @@
encToken.ResolveKeyIdentifierClause (encClause);
AsymmetricSecurityKey signKey = (AsymmetricSecurityKey)
signToken.ResolveKeyIdentifierClause
(signClause);
- string messageId = "uuid:" + Guid.NewGuid ();
+ string messageId = "urn:uuid:" + Guid.NewGuid ();
int identForMessageId = 1;
msg.Headers.Add (MessageHeader.CreateHeader
("MessageID", msg.Version.Addressing.Namespace, messageId));
@@ -148,6 +148,20 @@
SecurityAlgorithmSuite suite =
element.DefaultAlgorithmSuite;
+ // wss:Security
+ WSSecurityMessageHeader header =
+ new WSSecurityMessageHeader (serializer);
+ // wss:Security/wsu:Timestamp
+ if (element.IncludeTimestamp) {
+ WsuTimestamp timestamp = new WsuTimestamp ();
+ timestamp.Id = messageId + "-" +
identForMessageId++;
+ timestamp.Created = DateTime.Now;
+ // FIXME: on service side, use
element.LocalServiceSettings.TimestampValidityDuration
+ timestamp.Expires = timestamp.Created.Add
(element.LocalClientSettings.TimestampValidityDuration);
+ header.Contents.Add (timestamp);
+ }
+ msg.Headers.Add (header);
+
// FIXME: it needs to choose message parts by
// ChannelProtectionRequirements.
XmlElement body = doc.SelectSingleNode
("/s:Envelope/s:Body/*", nsmgr) as XmlElement;
@@ -224,21 +238,9 @@
Message ret = Message.CreateMessage (msg.Version,
msg.Headers.Action, new XmlNodeReader (doc.SelectSingleNode
("/s:Envelope/s:Body/*", nsmgr) as XmlElement));
- WSSecurityMessageHeader header =
- new WSSecurityMessageHeader (serializer);
ret.Headers.Clear ();
ret.Headers.CopyHeadersFrom (msg);
- // wsu:Timestamp
- if (element.IncludeTimestamp) {
- WsuTimestamp timestamp = new WsuTimestamp ();
- timestamp.Id = messageId + "-" +
identForMessageId++;
- timestamp.Created = DateTime.Now;
- // FIXME: on service side, use
element.LocalServiceSettings.TimestampValidityDuration
- timestamp.Expires = timestamp.Created.Add
(element.LocalClientSettings.TimestampValidityDuration);
- header.Contents.Add (timestamp);
- }
-
if (sig != null && msgIncludesToken)
header.Contents.Add (signToken);
if (signToken != encToken && msgIncludesToken)
@@ -252,8 +254,6 @@
else if (sig != null)
header.Contents.Add (sig);
- ret.Headers.Add (header);
-
return ret;
}
@@ -305,6 +305,11 @@
edata.Id = GenerateId (doc);
edata.Type = EncryptedXml.XmlEncElementUrl;
edata.EncryptionMethod = new EncryptionMethod
(suite.DefaultEncryptionAlgorithm);
+ // FIXME: here wsse:DigestMethod should be embedded
+ // inside EncryptionMethod. Since it is not possible
+ // with S.S.C.Xml.EncryptionMethod, we will have to
+ // build our own XML encryption classes.
+
edata.KeyInfo.AddClause (new KeyInfoEncryptedKey
(ekey));
edata.KeyInfo = new KeyInfo ();
SecurityTokenReferenceKeyInfo encKeyInfo = new
SecurityTokenReferenceKeyInfo (encClause, serializer, doc);
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog
2006-12-05 16:27:05 UTC (rev 69050)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/ChangeLog
2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,10 @@
+2006-12-05 Atsushi Emomoto <[EMAIL PROTECTED]>
+
+ * WSSecurityTokenSerializer.cs :
+ Added EncryptedKeyIdentifier clause writer.
+ Fixed thumbprint writer. WS-Security X509 Certificate Token Profile
+ does allows direct cetificate info only with IssuerSerial.
+
2006-10-12 Atsushi Emomoto <[EMAIL PROTECTED]>
* SecurityAlgorithmSuite.cs : added some overrides in impl. class
Modified:
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
2006-12-05 16:27:05 UTC (rev 69050)
+++
trunk/olive/class/System.ServiceModel/System.ServiceModel.Security/WSSecurityTokenSerializer.cs
2006-12-05 16:30:07 UTC (rev 69051)
@@ -30,6 +30,7 @@
using System.IdentityModel.Selectors;
using System.IdentityModel.Tokens;
using System.Security.Cryptography.X509Certificates;
+using System.Security.Cryptography.Xml;
using System.ServiceModel.Security.Tokens;
using System.Xml;
@@ -318,6 +319,8 @@
WriteX509IssuerSerialKeyIdentifierClause
(writer, (X509IssuerSerialKeyIdentifierClause) keyIdentifierClause);
else if (keyIdentifierClause is
X509ThumbprintKeyIdentifierClause)
WriteX509ThumbprintKeyIdentifierClause (writer,
(X509ThumbprintKeyIdentifierClause) keyIdentifierClause);
+ else if (keyIdentifierClause is
EncryptedKeyIdentifierClause)
+ WriteEncryptedKeyIdentifierClause (writer,
(EncryptedKeyIdentifierClause) keyIdentifierClause);
else
throw new NotImplementedException
(String.Format ("Security key identifier clause '{0}' is not either implemented
or supported.", keyIdentifierClause.GetType ()));
}
@@ -343,12 +346,11 @@
XmlWriter w, X509ThumbprintKeyIdentifierClause ic)
{
w.WriteStartElement ("o", "SecurityTokenReference",
Constants.WssNamespace);
- w.WriteStartElement ("X509Data", Constants.XmlDsig);
- w.WriteStartElement ("X509Thumbprint",
Constants.XmlDsig);
+ w.WriteStartElement ("o", "KeyIdentifier",
Constants.WssNamespace);
+ w.WriteAttributeString ("ValueType",
Constants.WssX509ThumbptintValueType);
w.WriteString (Convert.ToBase64String
(ic.GetX509Thumbprint ()));
w.WriteEndElement ();
w.WriteEndElement ();
- w.WriteEndElement ();
}
void WriteLocalIdKeyIdentifierClause (
@@ -361,6 +363,21 @@
w.WriteEndElement ();
}
+ void WriteEncryptedKeyIdentifierClause (
+ XmlWriter w, EncryptedKeyIdentifierClause ic)
+ {
+ w.WriteStartElement ("e", "EncryptedKey",
EncryptedXml.XmlEncNamespaceUrl);
+ w.WriteStartElement ("EncryptionMethod",
EncryptedXml.XmlEncNamespaceUrl);
+ w.WriteAttributeString ("Algorithm",
ic.EncryptionMethod);
+ w.WriteEndElement ();
+ w.WriteStartElement ("CipherData",
EncryptedXml.XmlEncNamespaceUrl);
+ w.WriteStartElement ("CipherValue",
EncryptedXml.XmlEncNamespaceUrl);
+ w.WriteString (Convert.ToBase64String
(ic.GetEncryptedKey ()));
+ w.WriteEndElement ();
+ w.WriteEndElement ();
+ w.WriteEndElement ();
+ }
+
[MonoTODO]
protected override void WriteTokenCore (
XmlWriter writer, SecurityToken token)
Modified:
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
===================================================================
---
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
2006-12-05 16:27:05 UTC (rev 69050)
+++
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/ChangeLog
2006-12-05 16:30:07 UTC (rev 69051)
@@ -1,3 +1,8 @@
+2006-12-05 Atsushi Enomoto <[EMAIL PROTECTED]>
+
+ * WSSecurityTokenSerializerTest.cs : added test for
+ X509ThumbprintKeyIdentifierClause writer. Removed some NotWorking.
+
2006-10-12 Atsushi Enomoto <[EMAIL PROTECTED]>
* WSSecurityTokenSerializerTest.cs : added test for writing
Modified:
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
===================================================================
---
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
2006-12-05 16:27:05 UTC (rev 69050)
+++
trunk/olive/class/System.ServiceModel/Test/System.ServiceModel.Security/WSSecurityTokenSerializerTest.cs
2006-12-05 16:30:07 UTC (rev 69051)
@@ -212,7 +212,17 @@
}
[Test]
- [Category ("NotWorking")]
+ public void WriteX509ThumbprintKeyIdentifierClause1 ()
+ {
+ StringWriter sw = new StringWriter ();
+ X509ThumbprintKeyIdentifierClause ic = new
X509ThumbprintKeyIdentifierClause (cert);
+ using (XmlWriter w = XmlWriter.Create (sw,
GetWriterSettings ())) {
+
WSSecurityTokenSerializer.DefaultInstance.WriteKeyIdentifierClause (w, ic);
+ }
+ Assert.AreEqual ("<o:SecurityTokenReference
xmlns:o=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd\"><o:KeyIdentifier
ValueType=\"http://docs.oasis-open.org/wss/oasis-wss-soap-message-security-1.1#ThumbprintSHA1\">GQ3YHlGQhDF1bvMixHliX4uLjlY=</o:KeyIdentifier></o:SecurityTokenReference>",
sw.ToString ());
+ }
+
+ [Test]
public void WriteEncryptedKeyIdentifierClause ()
{
StringWriter sw = new StringWriter ();
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches