> Hi all,
>
> I have the following scenario (XP / IIS 5, FX v1.1.4322) Both the
> client app and web service are running on my local development
> machine.
>
> I am using a straightforward HTTPWebRequest, and WSE 2 to add an X509
> certificate, as follows:
>
> ==================================================================
> Private Function CreateWebRequest() As HttpWebRequest
>
> Dim objRequest As HttpWebRequest = WebRequest.Create(m_URL &
> "/" & m_Operation)
>
>
> SetProxy(objRequest.Proxy)
>
> objRequest.Method = "POST"
> objRequest.ContentType = "application/x-www-form-urlencoded"
> objRequest.Timeout = 300000
>
> Dim certStore As X509CertificateStore
> certStore = X509CertificateStore.LocalMachineStore(X509CertificateStore.RootStore.ToString)
> certStore.OpenRead()
>
> Dim cert As X509Certificates.X509Certificate
> If certStore.FindCertificateBySubjectString("XYZ").Count > 0
> Then
> cert = certStore.FindCertificateBySubjectString("XYZ")(0)
> End If
>
> objRequest.ClientCertificates.Add(cert)
>
> Return objRequest
>
>
> End Function
>
> ==================================================================
>
> This is using a test cert generated with makecert, and imported into
> the local machine root store. When in debug mode, I can see the cert
> is retrieved and added to the request's clientcertificates collection
> fine.
>
> However when inspecting the Context.Request.ClientCertificate property
> in the WebService code, there is only an HTTPClientCerticate object
> there with its properties unpopulated . ( this seems to be present
> irrespective of whether or not the certificate is added client side)
>
> I have attempted a similar exercise with the following test code which
> I found here :
http://www.15seconds.com/issue/020312.htm > to test a straightforward web service scenario, with the same result.
> (The cert does not seem to be passed to the service...)
>
> ==================================================================
>
> private void TestService_Click(object sender, System.EventArgs e)
> {
> CSWebservices.CCWebservice objws ;
> objws = new CSWebservices.CCWebservice() ;
>
> X509Certificate objCert ;
> objCert = X509Certificate.CreateFromCertFile("xyz.cer") ;
>
>
> objws.ClientCertificates.Add(objCert) ;
>
> CSWebservices.ClientCertificateDetails objCertDetails ;
> objCertDetails = objws.GetCertificateDetails() ;
>
> }
>
> ==================================================================
>
> Server Side:
>
> [WebMethod]
> public ClientCertificateDetails GetCertificateDetails()
> {
> HttpClientCertificate objCertificate =
> HttpContext.Current.Request.ClientCertificate ;
> ClientCertificateDetails objCertificateDetails = new
> ClientCertificateDetails() ;
> objCertificateDetails.Cookie = objCertificate.Cookie ;
> objCertificateDetails.IsPresent = objCertificate.IsPresent ;
> objCertificateDetails.Issuer = objCertificate.Issuer ;
> objCertificateDetails.IsValid = objCertificate.IsValid ;
> objCertificateDetails.KeySize = objCertificate.KeySize ;
> objCertificateDetails.SecretKeySize = objCertificate.SecretKeySize
> ;
> objCertificateDetails.SerialNumber = objCertificate.SerialNumber ;
> objCertificateDetails.ServerIssuer = objCertificate.ServerIssuer ;
> objCertificateDetails.ServerSubject = objCertificate.ServerSubject
> ;
> objCertificateDetails.ValidFrom = objCertificate.ValidFrom ;
> objCertificateDetails.ValidUntil = objCertificate.ValidUntil ;
>
> return objCertificateDetails ;
> }
>
> ======================================================================
>
> If I configure IIS to require Client certificates: I experience HTTP
> 403.7 ( cert required ) errors.
>
> Any ideas / pointers would be appreciated.
>
> Thanks,
>
> Matthew