Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Add Server Certificate in IIS from C#

Posted on 2016-10-04
6
Medium Priority
?
518 Views
Last Modified: 2016-10-21
Hi All,

I wish to import a Certificate from a C# app into IIS.

If I import the file using the IIS manager GUI:
  - Server Certificates
    - Import
It allows me to use this to assign as the SSL certificate in the Site Binding.

Now, if I do the same process within C#, it adds the certificate  - or at least it looks identical - but when I try to assign it as the SSL certificate in the Site Binding, it gives the error:
"A specified logon session does not exist. It may already have been terminated. (Exception from HRESULT: 0x80070520)"

When you view the certificate in the 'Server Certificates' dialog it has identical entries for each of the columns...

The code I am using is as follows:
X509Store store = new X509Store("WebHosting", StoreLocation.LocalMachine);                
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
X509Certificate2 certificate = new X509Certificate2(xSSLCertificate, xSSLCertificatePassword);
store.Add(certificate);
store.Close();

Open in new window

Can anyone help?

Thanks,

James
0
Comment
Question by:James Atkin
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 3
6 Comments
 
LVL 28

Expert Comment

by:Dan McFadden
ID: 41829446
You need to bind the certificate to the site before the call to "store.Close();"

IIS Forum Thread:  https://forums.iis.net/t/1163325.aspx

Other reference links:

- https://forums.iis.net/t/1178407.aspx
- https://msdn.microsoft.com/en-us/library/ms731899(v=vs.110).aspx

Dan
0
 
LVL 4

Author Comment

by:James Atkin
ID: 41829687
Hi,

Thank you for your suggestions.

Unfortunately even in this sequence, the same issue persists.

I have now tried simply importing the Certificate using C#, then adding all the Web Site with references using the IIS Manager. As soon as I try to assign the SSL Certificate to the site, I get the same error.

It look like there must be some sort of error in the import process:

String xMachineName = Environment.MachineName;
String xSSLCertificate = @"D:\Cert\ServerSSL.pfx";
String xSSLCertificatePassword = @"TestPassword";
using (ServerManager iisManager = new ServerManager())
{
    X509Store store = new X509Store("WebHosting", StoreLocation.LocalMachine);
    store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadWrite);
    X509Certificate2 certificate = new X509Certificate2(xSSLCertificate, xSSLCertificatePassword);
    store.Add(certificate);
    store.Close();
    iisManager.CommitChanges();
}

Open in new window


I cannot see anything obvious here - any ideas?
0
 
LVL 28

Accepted Solution

by:
Dan McFadden earned 2000 total points
ID: 41831314
There aren't any site binding commands in the code above.

I would read the IIS Forum thread I posted, it gives a code example.

To sudo code it:

1. instantiate object for cert
2. set cert object properties
3. open the local certificate store
4. add the cert to the store
5. connect to the iis web site object
6. add the certificate binding
7. set the binding protocol
8. dispose of objects

Dan
0
Are You Ready for GDPR?

With the GDPR deadline set for May 25, 2018, many organizations are ill-prepared due to uncertainty about the criteria for compliance. According to a recent WatchGuard survey, a staggering 37% of respondents don't even know if their organization needs to comply with GDPR. Do you?

 
LVL 4

Author Comment

by:James Atkin
ID: 41831321
You are correct, I am currently testing just the automated import of the certificate into the store.
The same as using 'Server Certificates', Right-Click 'Import' within the IIS Manager application.

It does appear to add the entry, ready for binding to a site, however does not allow me to bind the created entry, even within the IIS Manager - same message as I receive when automating the bind.

The Import process does appear to work correctly, and will throw an error is the pwd is wrong, but I am not able to use it afterwards.

I am probably missing something obvious here, but I cannot see it :-(
0
 
LVL 28

Expert Comment

by:Dan McFadden
ID: 41833367
Are there any errors in the Event Logs that relate to the attempt to bind the cert in IIS Manager?

If so, can you please post them with all the details?

Dan
0
 
LVL 4

Author Closing Comment

by:James Atkin
ID: 41853550
This seems to be okay now!
Not sure what I had missed when I previously tested this.

Many thanks for the help :-)
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

If you don't have the right permissions set for your WordPress location in IIS, you won't be able to perform automatic updates. Here's how to fix the problem.
When it comes to showing a 404 error page to your visitors, you do not want that generic page to show, and you especially do not want your hosting provider’s ad error page to show either. In this article, I will show you how to enable the custom 40…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question