Próbuję użyć klasy HttpListener w aplikacji C#, aby mieć mini serwer dostarczający treści przez SSL. W tym celu potrzebuję użyć narzędzia httpcfg. Mam plik .pfx z moją parą kluczy publicznych i prywatnych. Jeśli zaimportuję tę parę kluczy ręcznie, używając mmc do lokalnego magazynu maszynowego, wszystko działa poprawnie. Jeśli jednak zaimportuję tę parę kluczy programowo przy użyciu klasy X509Store, nie będę mógł połączyć się z moim miniserwerem. Zauważ, że w obu metod certyfikat jest importowany do sklepu MY w LocalMachine. Dziwnie, jestem w stanie wyświetlić certyfikat w mmc, gdy programowo go zaimportuję, a kiedy go zobaczę, interfejs wskazuje, że klucz prywatny jest również dostępny dla tego certyfikatu.Zaimportuj certyfikat z kluczem prywatnym programowo
Kopiąc trochę głębiej, zauważam, że po ręcznym zaimportowaniu pary kluczy, widzę nowy plik pojawiający się w C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
, ale nie pojawia się, gdy importuję programowo. W powiązanej notatce, gdy usuwam ręcznie zaimportowany certyfikat, nie usuwa on odpowiedniego pliku klucza prywatnego z wcześniej wspomnianego katalogu.
W końcu moje pytanie brzmi następująco: Kiedy programowo dodaję certyfikat do sklepu, gdzie przechowywany jest klucz prywatny i dlaczego nie jest on dostępny dla klasy HttpListener (HttpApi)?
Należy zauważyć, że kwestia ta jest nieco podobne, ale nie sądzę Permissioning jest problem, ponieważ to wszystko jest robione jako ten sam użytkownik systemu Windows: How to set read permission on the private key file of X.509 certificate from .NET
Proszę oznaczyć to jako odpowiedź – Developer
Niestety muszę poczekać 48 godzin, zanim będę mógł to zrobić, w którym momencie prawdopodobnie zapomnę to zrobić. :( – Jason
Zmarnowałem około 30 minut, próbując zrozumieć, dlaczego "X509KeyStorageFlags.MachineKeySet & X509KeyStorageFlags.PersistKeySet" nie działa. Oczywiście powinno to być "X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet." Jest to dość oczywiste, na wypadek gdyby ktoś inny próbuje tego samego głupiego co zrobiłem –