IIS Client certificate not working. Returns 403 error -
i'm trying setup iis 8 (windows server 2012) accept client certificates secured webapi endpoint. following this post created self signed certificate , client certificate:
makecert.exe -r -n "cn=mycompany" -pe -sv mycompany.pvk -a sha1 -len 2048 -cy authority mycompany.cer makecert.exe -iv mycompany.pvk -ic mycompany.cer -n "cn=my client" -pe -sv myclient.pvk -a sha1 -len 2048 -sky exchange myclient.cer -eku 1.3.6.1.5.5.7.3.2 pvk2pfx.exe -pvk myclient.pvk -spc myclient.cer -pfx myclient.pfx -po the_password
i installed root certificate mycompany.cer on iis server, on iis manager/ssl settings selected "accept" radio button allow website accept client certificates.
on client side have c# test console app loads client cert myclient.pfx file , calls webapi endpoint:
var certhandler = new webrequesthandler(); certhandler.clientcertificateoptions = clientcertificateoption.manual; certhandler.useproxy = false; var certificate = new x509certificate2(file.readallbytes(@"c:\myclient.pfx"), "the_password"); certhandler.clientcertificates.add(certificate); var client = new httpclient(certhandler); var result = client.getasync("https://myserver/api/myendpoint").result; string resultstr = result.content.readasstringasync().result; console.writeline(resultstr);
i'm getting 403 error:
403 - forbidden: access denied. not have permission view directory or page using credentials supplied.
i tried same setup on local iis (windows 7): imported mycompany.cer file, setup ssl in iis. time works fine , webapi endpoint can see client certificate no problem.
any ideas?
-- update 1
i enabled failed request tracing on iis , this:
<failedrequest url="https://myserver:443/" siteid="35" apppoolid="certtest" processid="7248" verb="get" authenticationtype="not_available" activityid="{00000000-0000-0000-b0aa-0280000000e0}" failurereason="status_code" statuscode="403.16" triggerstatuscode="403.16" timetaken="0" xmlns:freb="http://schemas.microsoft.com/win/2006/06/iis/freb" >
if understand right error 403.16. understand happens when certificate on server not imported trusted root certification authorities under local computer. double checked , that's not case.
check that
- on iis machine have installed server's cert issuer certificate trusted root certification authorities under local computer
- on iis machine have installed client's cert issuer certificate trusted root certification authorities under local computer
- on client machine have installed server's cert issuer certificate trusted root certification authorities under windows user runs console app
- on client machine have installed client's cert issuer certificate trusted root certification authorities under windows user runs console app. or can make sure include necessary certificate's chain pfx file
- in code use x509certificate2's ctor version x509keystorageflags.userkeyset explicitly.
if won't help,
- try open url in ie (under same windows user account runs console app).
- open *.cer files double click on client machine under windows user account runs console app , see windows says validity.
- change iis ssl settings ignore client certificate see if it's server certificate. try both browser , console app.
Comments
Post a Comment