Code:
/ Dotnetfx_Win7_3.5.1 / Dotnetfx_Win7_3.5.1 / 3.5.1 / DEVDIV / depot / DevDiv / releases / whidbey / NetFXspW7 / ndp / fx / src / xsp / System / Web / HttpClientCertificate.cs / 1 / HttpClientCertificate.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* Client Certificate
*
* Copyright (c) 2000 Microsoft Corporation
*/
namespace System.Web {
using System.Collections;
using System.Collections.Specialized;
using System.Globalization;
using System.Security.Permissions;
using System.Web.Util;
///
/// The HttpClientCertificate collection retrieves the certification fields
/// (specified in the X.509 standard) from a request issued by the Web browser.
/// If a Web browser uses the SSL3.0/PCT1 protocol (in other words, it uses a URL
/// starting with https:// instead of http://) to connect to a server and the server
/// requests certification, the browser sends the certification fields.
///
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public class HttpClientCertificate : NameValueCollection {
/////////////////////////////////////////////////////////////////////////////
// Properties
///
/// [To be supplied.]
///
public String Cookie { get { return _Cookie;}}
///
/// A string containing the binary stream of the entire certificate content in ASN.1 format.
///
public byte [] Certificate { get { return _Certificate;}}
///
/// A set of flags that provide additional client certificate information.
///
public int Flags { get { return _Flags;}}
///
/// [To be supplied.]
///
public int KeySize { get { return _KeySize;}}
///
/// [To be supplied.]
///
public int SecretKeySize { get { return _SecretKeySize;}}
///
/// A string that contains a list of subfield values containing information about
/// the issuer of the certificate.
///
public String Issuer { get { return _Issuer;}}
///
/// [To be supplied.]
///
public String ServerIssuer { get { return _ServerIssuer;}}
///
/// A string that contains a list of subfield values. The subfield values contain
/// information about the subject of the certificate. If this value is specified
/// without a , the ClientCertificate collection returns a
/// comma-separated list of subfields. For example, C=US, O=Msft, and so on.
///
public String Subject { get { return _Subject;}}
///
/// [To be supplied.]
///
public String ServerSubject { get { return _ServerSubject;}}
///
/// A string that contains the certification serial number as an ASCII
/// representation of hexadecimal bytes separated by hyphens (-). For example,
/// 04-67-F3-02.
///
public String SerialNumber { get { return _SerialNumber;}}
///
/// A date specifying when the certificate becomes valid. This date varies with
/// international settings.
///
public DateTime ValidFrom { get { return _ValidFrom;}}
///
/// A date specifying when the certificate expires. The year value is displayed
/// as a four-digit number.
///
public DateTime ValidUntil { get { return _ValidUntil;}}
///
/// [To be supplied.]
///
public int CertEncoding { get { return _CertEncoding;}}
///
/// [To be supplied.]
///
public byte [] PublicKey { get { return _PublicKey;}}
///
/// [To be supplied.]
///
public byte [] BinaryIssuer { get { return _BinaryIssuer;}}
///
/// [To be supplied.]
///
public bool IsPresent { get { return((_Flags & 0x1) == 1);}}
///
/// [To be supplied.]
///
public bool IsValid { get { return((_Flags & 0x2) == 0);}}
/////////////////////////////////////////////////////////////////////////////
// Ctor
internal HttpClientCertificate(HttpContext context) {
String flags = context.Request.ServerVariables["CERT_FLAGS"];
if (!String.IsNullOrEmpty(flags))
_Flags = Int32.Parse(flags, CultureInfo.InvariantCulture);
else
_Flags = 0;
if (IsPresent == false)
return;
_Cookie = context.Request.ServerVariables["CERT_COOKIE"];
_Issuer = context.Request.ServerVariables["CERT_ISSUER"];
_ServerIssuer = context.Request.ServerVariables["CERT_SERVER_ISSUER"];
_Subject = context.Request.ServerVariables["CERT_SUBJECT"];
_ServerSubject = context.Request.ServerVariables["CERT_SERVER_SUBJECT"];
_SerialNumber = context.Request.ServerVariables["CERT_SERIALNUMBER"];
_Certificate = context.WorkerRequest.GetClientCertificate();
_ValidFrom = context.WorkerRequest.GetClientCertificateValidFrom();
_ValidUntil = context.WorkerRequest.GetClientCertificateValidUntil();
_BinaryIssuer = context.WorkerRequest.GetClientCertificateBinaryIssuer();
_PublicKey = context.WorkerRequest.GetClientCertificatePublicKey();
_CertEncoding = context.WorkerRequest.GetClientCertificateEncoding();
String keySize = context.Request.ServerVariables["CERT_KEYSIZE"];
String skeySize = context.Request.ServerVariables["CERT_SECRETKEYSIZE"];
if (!String.IsNullOrEmpty(keySize))
_KeySize = Int32.Parse(keySize, CultureInfo.InvariantCulture);
if (!String.IsNullOrEmpty(skeySize))
_SecretKeySize = Int32.Parse(skeySize, CultureInfo.InvariantCulture);
base.Add("ISSUER", null);
base.Add("SUBJECTEMAIL", null);
base.Add("BINARYISSUER", null);
base.Add("FLAGS", null);
base.Add("ISSUERO", null);
base.Add("PUBLICKEY", null);
base.Add("ISSUEROU", null);
base.Add("ENCODING", null);
base.Add("ISSUERCN", null);
base.Add("SERIALNUMBER", null);
base.Add("SUBJECT", null);
base.Add("SUBJECTCN", null);
base.Add("CERTIFICATE", null);
base.Add("SUBJECTO", null);
base.Add("SUBJECTOU", null);
base.Add("VALIDUNTIL", null);
base.Add("VALIDFROM", null);
}
///
/// Allows access to individual items in the collection by name.
///
public override String Get(String field)
{
if (field == null)
return String.Empty;
field = field.ToLower(CultureInfo.InvariantCulture);
switch (field) {
case "cookie":
return Cookie;
case "flags":
return Flags.ToString("G", CultureInfo.InvariantCulture);
case "keysize":
return KeySize.ToString("G", CultureInfo.InvariantCulture);
case "secretkeysize":
return SecretKeySize.ToString(CultureInfo.InvariantCulture);
case "issuer":
return Issuer;
case "serverissuer":
return ServerIssuer;
case "subject":
return Subject;
case "serversubject":
return ServerSubject;
case "serialnumber":
return SerialNumber;
case "certificate":
return System.Text.Encoding.Default.GetString(Certificate);
case "binaryissuer":
return System.Text.Encoding.Default.GetString(BinaryIssuer);
case "publickey":
return System.Text.Encoding.Default.GetString(PublicKey);
case "encoding":
return CertEncoding.ToString("G", CultureInfo.InvariantCulture);
case "validfrom":
return HttpUtility.FormatHttpDateTime(ValidFrom);
case "validuntil":
return HttpUtility.FormatHttpDateTime(ValidUntil);
}
if (StringUtil.StringStartsWith(field, "issuer"))
return ExtractString(Issuer, field.Substring(6));
if (StringUtil.StringStartsWith(field, "subject")) {
if (field.Equals("subjectemail"))
return ExtractString(Subject, "e");
else
return ExtractString(Subject, field.Substring(7));
}
if (StringUtil.StringStartsWith(field, "serversubject"))
return ExtractString(ServerSubject, field.Substring(13));
if (StringUtil.StringStartsWith(field, "serverissuer"))
return ExtractString(ServerIssuer, field.Substring(12));
return String.Empty;
}
/////////////////////////////////////////////////////////////////////////////
// Private data
private String _Cookie = String.Empty;
private byte [] _Certificate = new byte[0];
private int _Flags;
private int _KeySize;
private int _SecretKeySize;
private String _Issuer = String.Empty;
private String _ServerIssuer = String.Empty;
private String _Subject = String.Empty;
private String _ServerSubject = String.Empty;
private String _SerialNumber = String.Empty;
private DateTime _ValidFrom = DateTime.Now;
private DateTime _ValidUntil = DateTime.Now;
private int _CertEncoding;
private byte [] _PublicKey = new byte[0];
private byte [] _BinaryIssuer = new byte[0];
private String ExtractString(String strAll, String strSubject) {
if (strAll == null || strSubject == null)
return String.Empty;
String strReturn = String.Empty;
int iStart = 0;
String strAllL = strAll.ToLower(CultureInfo.InvariantCulture);
while (iStart < strAllL.Length) {
iStart = strAllL.IndexOf(strSubject + "=", iStart, StringComparison.Ordinal);
if (iStart < 0)
return strReturn;
if (strReturn.Length > 0)
strReturn += ";";
iStart += strSubject.Length + 1;
int iEnd = 0;
if (strAll[iStart]=='"') {
iStart++;
iEnd = strAll.IndexOf('"' , iStart);
}
else
iEnd = strAll.IndexOf(',' , iStart);
if (iEnd < 0)
iEnd = strAll.Length;
strReturn += strAll.Substring(iStart, iEnd - iStart);
iStart = iEnd + 1;
}
return strReturn;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* Client Certificate
*
* Copyright (c) 2000 Microsoft Corporation
*/
namespace System.Web {
using System.Collections;
using System.Collections.Specialized;
using System.Globalization;
using System.Security.Permissions;
using System.Web.Util;
///
/// The HttpClientCertificate collection retrieves the certification fields
/// (specified in the X.509 standard) from a request issued by the Web browser.
/// If a Web browser uses the SSL3.0/PCT1 protocol (in other words, it uses a URL
/// starting with https:// instead of http://) to connect to a server and the server
/// requests certification, the browser sends the certification fields.
///
[AspNetHostingPermission(SecurityAction.LinkDemand, Level=AspNetHostingPermissionLevel.Minimal)]
[AspNetHostingPermission(SecurityAction.InheritanceDemand, Level=AspNetHostingPermissionLevel.Minimal)]
public class HttpClientCertificate : NameValueCollection {
/////////////////////////////////////////////////////////////////////////////
// Properties
///
/// [To be supplied.]
///
public String Cookie { get { return _Cookie;}}
///
/// A string containing the binary stream of the entire certificate content in ASN.1 format.
///
public byte [] Certificate { get { return _Certificate;}}
///
/// A set of flags that provide additional client certificate information.
///
public int Flags { get { return _Flags;}}
///
/// [To be supplied.]
///
public int KeySize { get { return _KeySize;}}
///
/// [To be supplied.]
///
public int SecretKeySize { get { return _SecretKeySize;}}
///
/// A string that contains a list of subfield values containing information about
/// the issuer of the certificate.
///
public String Issuer { get { return _Issuer;}}
///
/// [To be supplied.]
///
public String ServerIssuer { get { return _ServerIssuer;}}
///
/// A string that contains a list of subfield values. The subfield values contain
/// information about the subject of the certificate. If this value is specified
/// without a , the ClientCertificate collection returns a
/// comma-separated list of subfields. For example, C=US, O=Msft, and so on.
///
public String Subject { get { return _Subject;}}
///
/// [To be supplied.]
///
public String ServerSubject { get { return _ServerSubject;}}
///
/// A string that contains the certification serial number as an ASCII
/// representation of hexadecimal bytes separated by hyphens (-). For example,
/// 04-67-F3-02.
///
public String SerialNumber { get { return _SerialNumber;}}
///
/// A date specifying when the certificate becomes valid. This date varies with
/// international settings.
///
public DateTime ValidFrom { get { return _ValidFrom;}}
///
/// A date specifying when the certificate expires. The year value is displayed
/// as a four-digit number.
///
public DateTime ValidUntil { get { return _ValidUntil;}}
///
/// [To be supplied.]
///
public int CertEncoding { get { return _CertEncoding;}}
///
/// [To be supplied.]
///
public byte [] PublicKey { get { return _PublicKey;}}
///
/// [To be supplied.]
///
public byte [] BinaryIssuer { get { return _BinaryIssuer;}}
///
/// [To be supplied.]
///
public bool IsPresent { get { return((_Flags & 0x1) == 1);}}
///
/// [To be supplied.]
///
public bool IsValid { get { return((_Flags & 0x2) == 0);}}
/////////////////////////////////////////////////////////////////////////////
// Ctor
internal HttpClientCertificate(HttpContext context) {
String flags = context.Request.ServerVariables["CERT_FLAGS"];
if (!String.IsNullOrEmpty(flags))
_Flags = Int32.Parse(flags, CultureInfo.InvariantCulture);
else
_Flags = 0;
if (IsPresent == false)
return;
_Cookie = context.Request.ServerVariables["CERT_COOKIE"];
_Issuer = context.Request.ServerVariables["CERT_ISSUER"];
_ServerIssuer = context.Request.ServerVariables["CERT_SERVER_ISSUER"];
_Subject = context.Request.ServerVariables["CERT_SUBJECT"];
_ServerSubject = context.Request.ServerVariables["CERT_SERVER_SUBJECT"];
_SerialNumber = context.Request.ServerVariables["CERT_SERIALNUMBER"];
_Certificate = context.WorkerRequest.GetClientCertificate();
_ValidFrom = context.WorkerRequest.GetClientCertificateValidFrom();
_ValidUntil = context.WorkerRequest.GetClientCertificateValidUntil();
_BinaryIssuer = context.WorkerRequest.GetClientCertificateBinaryIssuer();
_PublicKey = context.WorkerRequest.GetClientCertificatePublicKey();
_CertEncoding = context.WorkerRequest.GetClientCertificateEncoding();
String keySize = context.Request.ServerVariables["CERT_KEYSIZE"];
String skeySize = context.Request.ServerVariables["CERT_SECRETKEYSIZE"];
if (!String.IsNullOrEmpty(keySize))
_KeySize = Int32.Parse(keySize, CultureInfo.InvariantCulture);
if (!String.IsNullOrEmpty(skeySize))
_SecretKeySize = Int32.Parse(skeySize, CultureInfo.InvariantCulture);
base.Add("ISSUER", null);
base.Add("SUBJECTEMAIL", null);
base.Add("BINARYISSUER", null);
base.Add("FLAGS", null);
base.Add("ISSUERO", null);
base.Add("PUBLICKEY", null);
base.Add("ISSUEROU", null);
base.Add("ENCODING", null);
base.Add("ISSUERCN", null);
base.Add("SERIALNUMBER", null);
base.Add("SUBJECT", null);
base.Add("SUBJECTCN", null);
base.Add("CERTIFICATE", null);
base.Add("SUBJECTO", null);
base.Add("SUBJECTOU", null);
base.Add("VALIDUNTIL", null);
base.Add("VALIDFROM", null);
}
///
/// Allows access to individual items in the collection by name.
///
public override String Get(String field)
{
if (field == null)
return String.Empty;
field = field.ToLower(CultureInfo.InvariantCulture);
switch (field) {
case "cookie":
return Cookie;
case "flags":
return Flags.ToString("G", CultureInfo.InvariantCulture);
case "keysize":
return KeySize.ToString("G", CultureInfo.InvariantCulture);
case "secretkeysize":
return SecretKeySize.ToString(CultureInfo.InvariantCulture);
case "issuer":
return Issuer;
case "serverissuer":
return ServerIssuer;
case "subject":
return Subject;
case "serversubject":
return ServerSubject;
case "serialnumber":
return SerialNumber;
case "certificate":
return System.Text.Encoding.Default.GetString(Certificate);
case "binaryissuer":
return System.Text.Encoding.Default.GetString(BinaryIssuer);
case "publickey":
return System.Text.Encoding.Default.GetString(PublicKey);
case "encoding":
return CertEncoding.ToString("G", CultureInfo.InvariantCulture);
case "validfrom":
return HttpUtility.FormatHttpDateTime(ValidFrom);
case "validuntil":
return HttpUtility.FormatHttpDateTime(ValidUntil);
}
if (StringUtil.StringStartsWith(field, "issuer"))
return ExtractString(Issuer, field.Substring(6));
if (StringUtil.StringStartsWith(field, "subject")) {
if (field.Equals("subjectemail"))
return ExtractString(Subject, "e");
else
return ExtractString(Subject, field.Substring(7));
}
if (StringUtil.StringStartsWith(field, "serversubject"))
return ExtractString(ServerSubject, field.Substring(13));
if (StringUtil.StringStartsWith(field, "serverissuer"))
return ExtractString(ServerIssuer, field.Substring(12));
return String.Empty;
}
/////////////////////////////////////////////////////////////////////////////
// Private data
private String _Cookie = String.Empty;
private byte [] _Certificate = new byte[0];
private int _Flags;
private int _KeySize;
private int _SecretKeySize;
private String _Issuer = String.Empty;
private String _ServerIssuer = String.Empty;
private String _Subject = String.Empty;
private String _ServerSubject = String.Empty;
private String _SerialNumber = String.Empty;
private DateTime _ValidFrom = DateTime.Now;
private DateTime _ValidUntil = DateTime.Now;
private int _CertEncoding;
private byte [] _PublicKey = new byte[0];
private byte [] _BinaryIssuer = new byte[0];
private String ExtractString(String strAll, String strSubject) {
if (strAll == null || strSubject == null)
return String.Empty;
String strReturn = String.Empty;
int iStart = 0;
String strAllL = strAll.ToLower(CultureInfo.InvariantCulture);
while (iStart < strAllL.Length) {
iStart = strAllL.IndexOf(strSubject + "=", iStart, StringComparison.Ordinal);
if (iStart < 0)
return strReturn;
if (strReturn.Length > 0)
strReturn += ";";
iStart += strSubject.Length + 1;
int iEnd = 0;
if (strAll[iStart]=='"') {
iStart++;
iEnd = strAll.IndexOf('"' , iStart);
}
else
iEnd = strAll.IndexOf(',' , iStart);
if (iEnd < 0)
iEnd = strAll.Length;
strReturn += strAll.Substring(iStart, iEnd - iStart);
iStart = iEnd + 1;
}
return strReturn;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- GlyphsSerializer.cs
- ListDictionaryInternal.cs
- ChildDocumentBlock.cs
- ChangeNode.cs
- HierarchicalDataBoundControlAdapter.cs
- ContainerSelectorBehavior.cs
- AlignmentXValidation.cs
- HttpRuntimeSection.cs
- HttpRequest.cs
- storagemappingitemcollection.viewdictionary.cs
- DEREncoding.cs
- RolePrincipal.cs
- DummyDataSource.cs
- Exception.cs
- PartBasedPackageProperties.cs
- AQNBuilder.cs
- DesignerActionPanel.cs
- FamilyTypefaceCollection.cs
- DebugHandleTracker.cs
- DataGridViewCellConverter.cs
- ChangeTracker.cs
- GridView.cs
- AssemblyName.cs
- ValueTypeFixupInfo.cs
- CodeDomSerializerBase.cs
- DynamicDataRouteHandler.cs
- ProfileManager.cs
- ControlParameter.cs
- CodeNamespaceCollection.cs
- SoapAttributeOverrides.cs
- Process.cs
- GZipDecoder.cs
- RuntimeConfig.cs
- BinaryParser.cs
- LinkedList.cs
- EasingQuaternionKeyFrame.cs
- ImageSource.cs
- DataSourceIDConverter.cs
- TreeNodeCollection.cs
- DashStyles.cs
- MergablePropertyAttribute.cs
- ServiceReflector.cs
- StyleXamlParser.cs
- BackEase.cs
- SafeArrayTypeMismatchException.cs
- AssemblyBuilderData.cs
- TypeConverter.cs
- ServiceModelConfigurationSectionCollection.cs
- ResourceExpressionBuilder.cs
- NavigationProperty.cs
- UIElement3D.cs
- UnsafeNativeMethods.cs
- CacheEntry.cs
- CountdownEvent.cs
- ChunkedMemoryStream.cs
- XsltCompileContext.cs
- TreeView.cs
- TextEncodedRawTextWriter.cs
- RulePatternOps.cs
- HtmlUtf8RawTextWriter.cs
- OracleColumn.cs
- Internal.cs
- ConfigurationLockCollection.cs
- SslStreamSecurityUpgradeProvider.cs
- StringSorter.cs
- SqlCommand.cs
- DataGridViewRowCancelEventArgs.cs
- ProcessModuleCollection.cs
- Calendar.cs
- ByteAnimationUsingKeyFrames.cs
- TimeoutException.cs
- ListItemCollection.cs
- ByteRangeDownloader.cs
- RolePrincipal.cs
- XomlCompilerError.cs
- TypeHelper.cs
- ArraySubsetEnumerator.cs
- WebServiceParameterData.cs
- DataGridCell.cs
- MessageHeaderDescriptionCollection.cs
- ThreadAttributes.cs
- ItemChangedEventArgs.cs
- DataTemplateSelector.cs
- TreeView.cs
- StandardCommands.cs
- SqlNotificationRequest.cs
- CopyAction.cs
- FormsAuthenticationEventArgs.cs
- FormsAuthenticationCredentials.cs
- SiteMapDataSource.cs
- SoapHeaderAttribute.cs
- StagingAreaInputItem.cs
- Queue.cs
- SymbolTable.cs
- OracleException.cs
- DataSourceUtil.cs
- DecoderNLS.cs
- AffineTransform3D.cs
- JsonStringDataContract.cs
- InputManager.cs