2009-05-01 18 views
12

Bir mini web sunucusunun SSL üzerinden içerik sunması için bir C# uygulamasında HttpListener sınıfını kullanmaya çalışıyorum. Bunu yapmak için httpcfg aracını kullanmam gerekiyor. Genel ve özel anahtar çiftimle bir .pfx dosyası var. Bu anahtar çiftini elle yerel makine deposuna mmc kullanarak alırsam her şey yolunda gider. Ancak, bu anahtar çiftini program aracılığıyla X509Store sınıfını kullanarak içe aktarırsam, mini web sunucuma bağlanamıyorum. Her iki yöntemde de sertifikanın LocalMachine'deki MY deposuna aktarıldığını unutmayın. Tuhaf olarak, sertifikayı programlı olarak aldığımda mmc olarak görüntüleyebiliyorum ve bunu görüntülediğimde, kullanıcı arabirimi bu sertifika için özel bir anahtarın da kullanılabildiğini gösteriyor.Sertifikaları programlı olarak özel anahtar ile içe aktarma

Biraz daha derine iniyorum, anahtar çiftini el ile aldığımda, C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys'da yeni bir dosya görebiliyorum, ancak programsal olarak içe aktardığımda bir tane görünmez. İlgili bir notta, el ile alınan bir sertifikayı sildiğimde, ilgili özel anahtar dosyasını daha önce belirtilen dizinden kaldırmaz.

Nihayetinde, sorum şu: Sertifikayu depoya programa eklediğimde, özel anahtarın nerede saklandığı ve neden HttpListener sınıfına (HttpApi) erişilemediği?

Not bu soru biraz ilgilidir ama permissioning bu yana tüm aynı Windows kullanıcısı olarak yapılıyor sorundur sanmıyorum: How to set read permission on the private key file of X.509 certificate from .NET

cevap

28

Tamam, anladım. Sertifika nesnesi için anahtar depolama parametreleriyle ilgisi vardı. Bu soruna çalışan başka herkes için, X509KeyStorageFlags.PersistKeySet ve X509KeyStorageFlags.MachineKeySet bayraklarını kullanarak mağazaya eklediğiniz X509Certificate2 nesnelerinizi oluşturduğunuzdan emin olun. Bu, özel anahtarın, HttpApi (HttpListener tarafından sarılması) tarafından istenen makine anahtarı ayar yerinde kalması için zorlar.

+0

Lütfen cevabı – Developer

+0

olarak işaretleyiniz Ne yazık ki bunu yapabilmem için 48 saat beklemek zorundayım. :( – Jason

+6

"X509KeyStorageFlags.MachineKeySet & X509KeyStorageFlags.PersistKeySet" neden çalışmadığını anlamaya yaklaşık 30 dakika harcadım. Tabii ki, "X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet." Oldukça açık, sadece başka biri durumunda Ben aynı aptal şeyi dener. –

0

bu 2 yönlü SSL mı? Daha sonra makinenizde oluşturulan bir SSL Sertifika İsteği dosyası gönderdiniz mi? Bu Sertifika İsteği dosyası, SSL'yi oluşturmak için kullanılır ve birlikte bir ortak özel anahtar çifti oluştururlar.

Ayrıca, web uygulamasını çalıştırmak için kullanılan kullanıcı hesabı için cert izni atamayı denediniz mi? Microsoft WSE 3.0 aracını kullanarak bunu yapabilirsiniz.

+0

Şu anda test için kendiliğinden oluşturulmuş bir anahtar çifti kullanıyorum, bu nedenle bu sertifika talebi var. Henüz aynı kullanıcı olarak yapıldığından (web sunucusunu içe aktarma ve çalıştırma) ilgili hiçbir şeyle ilgili oynamadım. IIS veya başka bir şey yoktur. – Jason

+0

"Okumak isteği yok" mesajını okumuş olmalıydı. – Jason

0

Sorunuzun cevabı, ama burada bu yolda gidiyor başkalarının başvuru için Tam:

Here böylece ihtiyacını ortadan kaldırarak httpcfg yaptıklarını yapmak örnek C# kodu verir MS sohbete bir bağlantı vardır dağıtım aracı için.

+0

Teşekkürler, bu iyi bir bağlantı.Bunu kısaca inceledim, ancak senaryoda SSL yapılandırmasını yönetmek için gereken SSL_SET'in değil, URLACL_SET yapısının nasıl kullanılacağına gider. Ne yazık ki, SSL_SET yapısı biraz daha karmaşıktır, bu yüzden sadece çalışmak için hantal hale geldi ve httpcfg çalıştırılabilirliği daha kullanışlıdır. – Jason