Jak mogę utworzyć certyfikat z podpisem własnym dla hosta lokalnego?

133

Wykonałem kroki opisane w artykule Jak używać protokołu https / SSL na hoście lokalnym? ale to ustawia certyfikat z podpisem własnym dla nazwy mojego komputera i podczas przeglądania go przez https: // localhost otrzymuję ostrzeżenie IE.

Czy istnieje sposób na utworzenie certyfikatu z podpisem własnym dla „localhost”, aby uniknąć tego ostrzeżenia?

chris
źródło
Czy zainstalowałeś certyfikat jako CA?
vcsjones
Postępowałem zgodnie z procesem, aby zainstalować certyfikat z podpisem własnym w usługach IIS pod Win7. Ale to tworzy certyfikat dla „mymachinename”, a potrzebuję go dla „localhost”.
chris
1
Cześć! Rozważ ustawienie odpowiedzi Auri jako głównej odpowiedzi, ponieważ narzędzie makecert jest przestarzałe. Link do odpowiedzi: stackoverflow.com/a/44164653/1461602
Tormod Haugene

Odpowiedzi:

81

Chociaż ten post jest oznaczony dla systemu Windows, jest to istotne pytanie na OS X, na które nie widziałem odpowiedzi gdzie indziej. Oto kroki, aby utworzyć certyfikat z podpisem własnym dla hosta lokalnego w systemie OS X :

# Use 'localhost' for the 'Common name'
openssl req -x509 -sha256 -nodes -newkey rsa:2048 -days 365 -keyout localhost.key -out localhost.crt

# Add the cert to your keychain
open localhost.crt

W programie Keychain Accesskliknij dwukrotnie ten nowy certyfikat hosta lokalnego. Rozwiń strzałkę obok „Zaufaj” i wybierz „Zawsze ufaj”. Chrome i Safari powinny teraz ufać temu certyfikatowi. Na przykład, jeśli chcesz użyć tego certyfikatu z node.js:

var options = {
    key: fs.readFileSync('/path/to/localhost.key').toString(),
    cert: fs.readFileSync('/path/to/localhost.crt').toString(),
    ciphers: 'ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384',
    honorCipherOrder: true,
    secureProtocol: 'TLSv1_2_method'
};

var server = require('https').createServer(options, app);
Ben Flynn
źródło
2
Pierwsze polecenie ssh-keygen,, jest niepotrzebne, ponieważ polecenie openssl tworzy również nowy klucz (i nadpisuje ten utworzony przez ssh).
Félix Saparelli
7
Możesz także całkowicie zautomatyzować proces, dodając -subj '/CN=localhost'do opensslargumentów.
Félix Saparelli
8
Aby OS X zaufał temu z wiersza poleceń, zamiast klikać, możesz zrobić:sudo security add-trusted-cert -p ssl -d -r trustRoot -k ~/Library/Keychains/login.keychain localhost.crt
philfreo
1
Dotyczy również systemu Linux. Wielkie dzięki.
Marcel
1
Wykonałem wszystkie te kroki i otrzymuję ERR_SSL_VERSION_OR_CIPHER_MISMATCHw Chrome 60, a Safari 10.1.2 też tego nie lubi.
styfle
61

Ponieważ to pytanie jest oznaczone tagiem IISi nie mogę znaleźć dobrej odpowiedzi, jak uzyskać zaufany certyfikat, dam za to moje 2 centy:

Najpierw użyj polecenia z @AuriRahimzadeh w PowerShell jako administrator:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

To dobrze, ale certyfikat nie jest zaufany i spowoduje następujący błąd. Dzieje się tak, ponieważ nie jest zainstalowany w Trusted Root Certification Authorities.

wprowadź opis obrazu tutaj

Rozwiąż ten problem, zaczynając mmc.exe.

Następnie idź do:

Plik -> Dodaj lub usuń przystawki -> Certyfikaty -> Dodaj -> Konto komputera -> Komputer lokalny. Kliknij Finish.

Rozwiń Personalfolder, a zobaczysz swój localhostcertyfikat:

wprowadź opis obrazu tutaj

Skopiuj certyfikat do Trusted Root Certification Authorities - Certificatesfolderu.

Ostatnim krokiem jest otwarcie Internet Information Services (IIS) Managerlub po prostu inetmgr.exe. Następnie przejdź do swojej witryny, wybierz Bindings...i Add...lub Edit.... Ustaw httpsi wybierz certyfikat z listy rozwijanej.

wprowadź opis obrazu tutaj

Twój certyfikat jest teraz zaufany:

wprowadź opis obrazu tutaj

Ogglas
źródło
9
To powinna być akceptowana odpowiedź! To działa! Jeśli bawiłeś się z lokalnym hostem i zaufanym certyfikatem. Pamiętaj, aby usunąć wszystkie stare certyfikaty localhost (za pomocą konsoli MMC i IIS (top serwer zarządzany)
Tuan Jinn
Dzięki! Jest tak wiele odpowiedzi SO i postów na blogu na ten temat, ale bardzo niewiele mówi się o problemach z zaufaniem certyfikatów. Wskazówka: może powinieneś wyjaśnić, dlaczego nie używasz domyślnego portu SSL 443? Wydaje mi się, że dzieje się tak dlatego, że ten port jest często przejmowany przez inny proces.
HoffZ
Naprawdę fajna odpowiedź i działa dobrze w IIS jako 2020. Wielkie dzięki!
alessandrocb
Działa również dla aliasów w pliku hosts
Zef
52

Za pomocą programu PowerShell można wygenerować certyfikat z podpisem własnym za pomocą polecenia cmdlet new-selfsignedcertificate:

New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"

Uwaga: makecert.exe jest przestarzały.

Dokumentacja poleceń cmdlet: https://technet.microsoft.com/itpro/powershell/windows/pkiclient/new-selfsignedcertificate

Auri Rahimzadeh
źródło
Taka powinna być odpowiedź od 2017 r.
Tormod Haugene,
1
Dla tych, którzy śledzą i nie wiedzą, jak zainstalować wynikowy certyfikat, postępuj zgodnie z instrukcjami w tym filmie, to zadziałało! youtube.com/watch?v=y4uKPUFmSZ0
Eric Brown - Cal
6
gdzie są przechowywane pliki klucza i crt?
woojoo666
1
@ woojoo666 z -KeyLocationflagą możesz określić lokalizację.
hamid
46

Po spędzeniu dużej ilości czasu nad tym problemem stwierdziłem, że ilekroć postępowałem zgodnie z sugestiami dotyczącymi korzystania z usług IIS w celu sporządzenia certyfikatu z podpisem własnym, stwierdziłem, że wartości Issued To i Issued by nie były poprawne. SelfSSL.exe był kluczem do rozwiązania tego problemu. Poniższa witryna nie tylko zapewnia krok po kroku podejście do tworzenia certyfikatów z podpisem własnym, ale także rozwiązuje problem wystawiony dla i wystawiony przez. Oto najlepsze rozwiązanie, jakie znalazłem, do tworzenia certyfikatów z podpisem własnym. Jeśli wolisz zobaczyć ten sam samouczek w formie wideo, kliknij tutaj .

Przykładowe użycie SelfSSL wyglądałoby mniej więcej tak:

SelfSSL /N:CN=YourWebsite.com / V: 1000 / S: 2

SelfSSL /? przedstawi listę parametrów wraz z wyjaśnieniem.

app.developer.henry
źródło
Artykuł RobBagby.com zadziałał dla mnie idealnie. Dobrze znajdź Henry'ego.
cymorg
MEGA! Ten film ma słabą jakość, ale zawiera wszystko, co potrzebne.
tonco
2
Link do strony robbagby jest martwy. Zobacz moją odpowiedź na 2 wysokiej jakości samouczki youtube autorstwa CodeCowboyOrg
Moses Machua
Edytowana odpowiedź na link do archiwum Wayback artykułu na robbagby.com.
Prometeusz
23

Jeśli próbujesz utworzyć certyfikat z podpisem własnym, który pozwala na to, http://localhost/mysite oto sposób na jego utworzenie

makecert -r -n "CN=localhost" -b 01/01/2000 -e 01/01/2099 -eku 1.3.6.1.5.5.7.3.1 -sv localhost.pvk localhost.cer
cert2spc localhost.cer localhost.spc
pvk2pfx -pvk localhost.pvk -spc localhost.spc -pfx localhost.pfx

Od http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/32bc5a61-1f7b-4545-a514-a11652f11200

David Burela
źródło
2
gdzie poszedł mój certyfikat: o nie ma go w C: \ Windows \ system32
EaterOfCode
2
Nawiasem mówiąc, narzędzie makecert.exe jest używane za pośrednictwem wiersza polecenia programu Visual Studio dla przyszłych czytelników. Można również skorzystać z narzędzi Internet Information Services (IIS) Resource Kit i zainstalować SelfSSL 1.0. microsoft.com/downloads/en/ ...
atconway
3
Chociaż szybkie odpowiedzi są świetne, nie zawsze pomagają. „Certyfikat nie może być używany jako certyfikat serwera SSL” to błąd, który widzę w usługach IIS7. Op wspomniał także o ostrzeżeniach przeglądarki, a nie o „Jak utworzyć certyfikat”?
cmroanirgo
Możesz pominąć parametr cert2spc step due, który pvk2pfx -spc akceptuje zarówno pliki .spc, jak i .cer
abatishchev
1
@EaterOfCode Mine znajdowało się w C: \ Windows \ SysWOW64
Bay Sola.
10

Poleciłbym narzędzie Pluralsight do tworzenia certyfikatów z podpisem własnym: http://blog.pluralsight.com/selfcert-create-a-self-signed-certificate-interactively-gui-or-programmatically-in-net

Utwórz certyfikat jako plik .pfx i zaimportuj go do usług IIS. I dodaj go jako zaufany główny urząd certyfikacji.

cederlof
źródło
1
Po wypróbowaniu wszystkich rodzajów „magii” PowerShell i innych rzeczy, które po prostu nie działały - narzędzie Pluralsight wygenerowało dla mnie działający skrypt w 30 sekund, obejmujący czas potrzebny na zjedzenie pizzy (+ pobieranie i wyodrębnij narzędzie, mam na myśli). Ponieważ nadal używam Windows 7 na tym starym laptopie - to było dla mnie idealne rozwiązanie, dzięki!
Ade
1

Tak i nie. Certyfikaty z podpisem własnym powodują wyświetlenie tego komunikatu ostrzegawczego, ponieważ certyfikat nie został podpisany przez zaufany ośrodek certyfikacji. Istnieje kilka opcji, które możesz rozważyć, aby usunąć to ostrzeżenie na komputerze lokalnym. Aby uzyskać szczegółowe informacje, zapoznaj się z najwyżej ocenionymi odpowiedziami na to pytanie:

Co muszę zrobić, aby program Internet Explorer 8 akceptował certyfikat z podpisem własnym?

Mam nadzieję że to pomoże!


EDYTOWAĆ:

Przepraszamy, początkowo nie wiedziałem, że jesteś ograniczony do lokalnego hosta. Możesz spróbować postępować zgodnie ze wskazówkami znajdującymi się pod poniższym łączem, aby „Wygenerować certyfikat z podpisem własnym z poprawną nazwą zwykłą”.

http://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-in-iis-7.html

Phil Klein
źródło
Nie, pojawia się komunikat ostrzegawczy, ponieważ adres URL ( localhost ) nie jest zgodny z nazwą certyfikatu, która jest wystawiana pod nazwą komputera. Jeśli przełączę się na mymachinename , to nie pojawia się błąd. Niestety, muszę użyć localhost, a nie nazwy komputera z powodów, które nie mają wpływu na pytanie.
chris
1

możesz spróbować mkcert.

macos: brew install mkcert

clark yu
źródło
0

Jeśli używasz programu Visual Studio, istnieje łatwy sposób na skonfigurowanie i włączenie protokołu SSL przy użyciu usług IIS Express, które opisano tutaj

Amir Chatrbahr
źródło