2013-01-08 12 views
8

Zgubiłem się w zawiłym labiryncie certyfikatów i kluczy prywatnych.Jak utworzyć certyfikat do użycia z SslStream AuthenticateAsServer bez importowania

Piszę serwer w języku C#. Chcę, aby akceptował połączenia SSL. Do celów testowych chcę wygenerować certyfikat dla "localhost" i użyć tego certyfikatu dla serwera. Idealnie nie chcę zanieczyszczać mojego magazynu certyfikatów, więc chcę po prostu plik lub pliki na dysku, który może załadować kod C# w celu dostarczenia certyfikatu.

Wszystko, czego próbowałem (stosując metody książki kucharskiej sugerowane przez wyszukiwarki internetowe), daje mi "Dane uwierzytelniające dostarczone do pakietu nie zostały rozpoznane" lub "Tryb serwera SSL musi korzystać z certyfikatu z powiązanym kluczem prywatnym."

Czy istnieje sposób na wygenerowanie certyfikatu i klucza prywatnego, a następnie załadowanie ich do obiektu certyfikatu X509 bez ładowania ich do magazynu certyfikatów komputera?

+0

Czy naprawdę potrzebujesz tego certyfikatu lub chcesz go pominąć? sprawdź używając? – VladL

+0

Serwer jest serwerem WWW. Muszę połączyć się z nią za pomocą przeglądarki, używając protokołu https. Więc myślę, że potrzebuję certyfikatu. Mam świadomość, że certyfikat nie będzie zaufany, więc użytkownik przeglądarki będzie musiał go zaakceptować jako taki. –

Odpowiedz

12

w końcu wpadłem następujące czynności, aby utworzyć plik server.pfx:

makecert.exe -r -pe -n "CN=localhost" -sky exchange -sv server.pvk server.cer 
pvk2pfx -pvk server.pvk -spc server.cer -pfx server.pfx 

Potem załadowano go w kodzie z:

certificate = new X509Certificate2("server.pfx", "password"); 

(Tak naprawdę nie napisałem tak twardego hasła :-)

Sztuką było wiedzieć, że potrzebuję pliku pfx i że muszę go załadować przy użyciu klasy X509Certificate2, a nie X509Certifica te.

+0

Uratowałem moje życie. Użyłem tej metody do dostarczenia certyfikatu przez moją aplikację serwera proxy do przeglądarki klienta. Wiem, że nie jest to właściwa metoda, ale nadal wszystko jest w porządku. –

+0

Ale ta metoda nie działa dobrze na serwerze proxy. Czy masz pojęcie, jak go rozwiązać? –

+0

Nie działa. Dostaję 'CryptographicException' z napisem" Podane hasło sieciowe jest nieprawidłowe. ", Co jest oczywiście fałszywe, ponieważ użyłem hasła' x', które bardzo trudno jest pomylić. Jakieś pomysły na naprawę? – Timwi

1

Istnieje wiele narzędzi, które powinny umożliwiać działanie jako własny ośrodek certyfikacji i generowanie certyfikatu. XCA jest jednym z nich. Istnieje również wiele metod, na przykład za pomocą komend OpenSSL.

Generowanie samopodpisanego certyfikatu może wydawać się najłatwiejszą opcją, ale użycie testowego urzędu certyfikacji (i oddzielnego certyfikatu serwera) może być tego warte. Umożliwi to zaimportowanie testowego urzędu certyfikacji do magazynu przeglądarki, jeśli jest to konieczne, aby testy były bardziej realistyczne. Nie jest to dużo trudniejsze dzięki odpowiednim narzędziom (np. XCA).

Po wygenerowaniu certyfikatu serwera i jego klucza prywatnego, przekształć go w plik PKCS # 12 (.p12/.pfx).

Powinieneś być wtedy w stanie załadować go za pomocą X509Certificate2.import(...). (. Patrz przykład w this answer)

+0

Dla tych, którzy chcą skorzystać z tego rozwiązania. Myślę, że moja odpowiedź może być uzupełnieniem tego, co powiedział @Bruno, [tutaj] (http://stackoverflow.com/questions/9982865/sslstream-example-how-do-i-get-certyfikaty-thatwork/38155120#38155120) I pokaż, w jaki sposób stworzyć ważny certyfikat z OpenSSL. – Joseph

3

Metoda Niki Loche działa.

Jeśli uzyskasz The specified network password is not correct., powinieneś spróbować bez hasła w C#. Nie ma znaczenia, jakie było twoje hasło wejściowe w makecert.

certificate = new X509Certificate2("Server.pfx", ""); 

Ale jeśli chcesz używać hasła (nie jest powodem, że tam jest :)), spróbuj zmienić pvk2pfx.exe polecenie do:

pvk2pfx.exe”-pi hasło -pvk Server .pvk -spc server.cer -pfx Server.pfx

w C# i wpisać:

certyfikat = new X509Certificate2 ("Server.pfx”,«password»);

Hasło musi być takie samo, jak to jest w tworzeniu pliku cer

To załatwiło sprawę dla mnie Mam nadzieję, że to pomoże ktoś

+0

Dziękujemy! Tak się cieszę, że przeczytałem inne odpowiedzi :) –

0

miałem ten sam problem podczas importowania certyfikatu komputera ze sklepu maszynowego (nie sklepu użytkownik) I rozwiązać go uruchamiając wizualna Studio jako administrator , ponieważ uprawnienia administratora są wymagane, aby uzyskać dostęp do klucza prywatnego certyfikatu magazynu maszynowego.

Powiązane problemy