Jak zezwolić HTTPS dla Apache na localhost?

193

Poproszono mnie o skonfigurowanie HTTPS z samopodpisanym certyfikatem na Apache na localhost, ale jak mam to zrobić? W ogóle nie mam pojęcia.

KennC.
źródło
1
Użyj Serveo ! ssh -R youruniquesubdomain:80:localhost:3000 serveo.netPodaj swoją subdomenę i numer portu, a będziesz gotowy do https://youruniquesubdomain.serveo.net
kontynuacji

Odpowiedzi:

135

Właśnie próbowałem - musiałem przetestować kod programistyczny na moim lokalnym hoście Apache w systemie Windows . To było WIĘCEJ trudniejsze niż powinno być. Ale oto kroki, które zdołały zadziałać po wielu zabiegach na głowie ...

Przekonałem się, że moja instalacja Apache jest dostarczana, openssl.execo jest pomocne. Jeśli nie masz kopii, musisz ją pobrać. Moja kopia znajdowała się w Apache2\binfolderze, dlatego też odsyłam do niej poniżej.

Kroki:

  1. Upewnij się, że masz uprawnienia do zapisu w folderze conf Apache
  2. Otwórz wiersz polecenia w Apache2\conffolderze
  3. Rodzaj
    ..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
  4. Możesz pozostawić wszystkie pytania puste, z wyjątkiem:

    • Hasło PEM: hasło tymczasowe, takie jak „hasło”
    • Common Name: nazwa hosta twojego serwera

  5. Po zakończeniu wpisz
    ..\bin\openssl rsa -in blarg.pem -out blarg.key

  6. Wygeneruj swój samopodpisany certyfikat, wpisując:
    ..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365

  7. Otwórz conf\httpd.confplik Apache i upewnij się, że moduł SSL jest włączony - na początku tego wiersza nie powinno być haszu:
    LoadModule ssl_module modules/mod_ssl.so

  8. Niektóre instalacje Apache umieszczają konfigurację SSL w osobnym pliku. Jeśli tak, upewnij się, że dołączono plik konf. SSL. W moim przypadku musiałem odkomentować tę linię:
    Include conf/extra/httpd-ssl.conf

  9. W konfiguracji SSL httpd-ssl.confmusiałem zaktualizować następujące linie:

    • Zaktualizuj
      SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
      do
      SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
      (nawiasy na ścieżce dezorientują moduł, więc musimy uciec)
    • DocumentRoot - ustaw ten folder na swoje pliki internetowe
    • ServerName - nazwa hosta serwera
    • SSLCertificateFile "conf/blarg.cert"
    • SSLCertificateKeyFile "conf/blarg.key"

  10. Uruchom ponownie Apache.

  11. Spróbuj załadować https://localhost/w przeglądarce.

Mam nadzieję, że dotarłeś tak daleko. Zaktualizuj ten post za pomocą innych pomocnych informacji.

(Zrzuty ekranu dzięki uprzejmości Neila Obremskiego i jego pomocnego artykułu - choć teraz są nieaktualne.)

Simon
źródło
2
Dzięki. Musiałem także edytować dyrektywy ErrorLog, TransferLog i CustomLog do prawidłowych ścieżek, w przeciwnym razie Apache nie uruchomi się.
Tamlyn
1
Z jakiegoś powodu instrukcje już nie działają lub są niekompletne
Jakobian
6
Musiałem odkomentować również w moim httpd.conf, aby to działało: LoadModule socache_shmcb_module moduły / mod_socache_shmcb.so
erik
1
Zrobiłem jeszcze dwa kroki, aby to działało, dodaj moduł LoadModule socache_shmcb_module moduły / mod_socache_shmcb.so i w httpd-ssl.conf Poprawiam ścieżkę dziennika ssl w wierszu 250, CustomLog ".apache24 / logs / ssl_request.log" \
Wasim A ,
5
Aby wygenerować pliki .pem i .key, musiałem ustawić 2 zmienne środowiskowe w kroku 2: ustawić OPENSSL_CONF = C: \ ścieżka \ do \ apache \ Apache2.4.4 \ conf \ openssl.cnf ustaw RANDFILE = C: \ ścieżka \ do \ apache \ Apache2.4.4 \ conf \ .rnd
eosfera
57

Używam do tego ngrok ( https://ngrok.com/ ). ngrok jest narzędziem wiersza poleceń i tworzy tunel dla hosta lokalnego. Tworzy połączenie zarówno HTTP, jak i https. Po pobraniu należy uruchomić następujące polecenie:

ngrok http 80

(W wersji 2 składnia jest następująca: ngrok http 80. W wersji 2 można tunelować dowolny port).

Po kilku sekundach otrzymasz dwa adresy URL:

http://a_hexadecimal_number.ngrok.com
https://a_hexadecimal_number.ngrok.com

Teraz oba adresy URL wskazują na localhost.

sudip
źródło
1
@sudip, czy kod opensource ngrok działa w taki sposób, że możemy go hostować na naszym serwerze bez modyfikacji? Jeśli nie, jest to raczej showstopper, ponieważ przekierowywanie żądań użytkowników na host zewnętrzny, taki jak ngrok , nie jest w porządku .
Pacerier
2
@Pacerier Nie zamierzam używać go na serwerze. Używam go na localhost (Bcz mój dostawca sieci daje mi dynamiczny adres IP). Użyłem go po raz pierwszy do testowania paypal IPN i działało idealnie. Zastanawiam się, dlaczego ktoś użyje go na serwerze i do jakiego celu.
sudip
@sudip, Cel jest oczywisty, Aby kod działający na HTTP działał również z HTTPS bez dodatkowego kodowania.
Pacerier
1
Chociaż jest to przydatne, wydaje się niezwykle niepewne, aby umożliwić dostęp do maszyny deweloperskiej do otwartego Internetu. Korzystanie z czegoś takiego spowoduje zwolnienie u pracodawcy świadomego bezpieczeństwa.
Andy M,
@Mniam mniam mniam . To było całkowicie darmowe wcześniej w V 1. Ale porty http i https są nadal wolne w v 2 (nie wiem, czy jest jakieś ograniczenie portów, czy istnieje bezpłatny plan). Sprawdź bezpłatny plan tutaj: ngrok.com/product#pricing
sudip
24

tutaj jest najprostszy sposób, aby to zrobić

najpierw skopiuj te pliki server.crt i server.key (znajdź w załączniku) do katalogu apache / conf / ssl

następnie otwórz plik httpd.conf i dodaj następujący wiersz

Listen 80
Listen 443

NameVirtualHost *:80
NameVirtualHost *:443

<VirtualHost *:443>
    DocumentRoot "d:/wamp/www"  #your wamp www root dir
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "d:/wamp/bin/apache/Apache2.4.4/conf/ssl/server.crt"
    SSLCertificateKeyFile "d:/wamp/bin/apache/Apache2.4.4/conf/ssl/server.key"
</VirtualHost>
Anil Gupta
źródło
3
Musiałem włączyć także moduł LoadModule ssl_module libexec / apache2 / mod_ssl.so w (/etc/apache2/httpd.conf)
Alexey
17
Zastanawiam się, jak bezpieczne / niebezpieczne jest pobieranie plików * .crt * .key z niezaufanego źródła zamiast generowania własnego.
Petr Peller
4
@PetrPeller konfigurujemy https dla rozwoju lokalnego, więc dlaczego zastanawiasz się nad bezpiecznym / niebezpiecznym
Anil Gupta
7
Świetne byłoby wyjaśnienie, jak wygenerować te pliki. Ponieważ pobieranie plików z nieznanego źródła jest złą praktyką, ale także dlatego, że tego rodzaju łącza w pewnym momencie się zepsują.
Stephan Vierkant,
2
Ten samouczek jest w porządku digitalocean.com/community/tutorials/…
Dhiraj
11

Aby zabezpieczyć bezpieczeństwo informacji przesyłanych do iz serwera internetowego, dobrym pomysłem jest włączenie szyfrowania komunikacji między klientami a serwerem. Jest to często nazywane SSL .

Więc skonfigurujmy HTTPS z samopodpisanym certyfikatem na Apache2. Mam zamiar wymienić kroki, które powinieneś wykonać:

  • Zainstaluj serwer WWW Apache2 na swoim komputerze. W przypadku maszyny linuxowej otwórz terminal i typ

sudo apt-get install apache2

  • Po pomyślnej instalacji sprawdź status usługi apache2, wykonując polecenie

status apache2 usługi sudo

Powinien wyjść

status usługi apache2

  • Przejdź do przeglądarki i wpisz

http: // localhost: 80

Sprawdź, czy otrzymujesz domyślną stronę apache2 w ten sposób.

domyślne wyjście apache2

  • Do szyfrowania połączenia internetowego potrzebujemy certyfikatu z urzędu certyfikacji (CA) lub możemy użyć certyfikatów z podpisem własnym. Utwórzmy samopodpisany certyfikat za pomocą następującego polecenia.

openssl rex -x509 -newkey rsa: 2048 -keyout mykey.key -out mycert.pem-dni 365-węzły

Proszę odpowiednio wypełnić informacje, jak pokazano poniżej.

utwórz samopodpisany certyfikat za pomocą openssl

mykey.key i mycert.pem powinny zostać utworzone w bieżącym katalogu roboczym.

  • Byłoby miło, gdybyśmy przenieśli certyfikaty i klucze we wspólne miejsce i serwer apache2 będzie je łatwo znajdował. Wykonajmy więc następujące polecenia

sudo cp mycert.pem / etc / ssl / certs

sudo cp mykey.key / etc / ssl / private

  • Włączmy tryb SSL na twoim serwerze

sudo a2enmod ssl

Powinien wyglądać tak

włącz ssl

  • Skonfigurujmy apache2, aby używał samopodpisanego certyfikatu i klucza, który wygenerowaliśmy powyżej.

sudo vi /etc/apache2/sites-available/default-ssl.conf

Znajdź te dwa wiersze i zamień je na swoje certyfikaty i ścieżki dostępu.

Inicjał

default-conf

Finał

po zmianach konfiguracji

  • Włącz witrynę

cd / etc / apache2 / sites-available /

sudo a2ensite default-ssl.conf

  • Uruchom ponownie usługę apache2

usługa sudo apache2 restart

  • Sprawdź serwer WWW Apache2 na HTTPS. Otwórz przeglądarkę ponownie i wpisz

https: // localhost: 443

Powinien wyświetlać coś takiego z ostrzeżeniem, że strona, którą zamierzasz wyświetlić, nie jest bezpieczna, ponieważ skonfigurowaliśmy serwer z certyfikatem z podpisem własnym.

wprowadź opis zdjęcia tutaj

  • Gratulacje, skonfigurowałeś swój apache2 z punktem końcowym HTTPS, teraz kliknij zaawansowane -> dodaj wyjątek -> potwierdź wyjątek bezpieczeństwa , ponownie zobaczysz stronę domyślną.

strona po dodaniu wyjątku

Dinesh Kumar
źródło
Wolę nie edytować żadnego pliku konfiguracyjnego, jeśli mogę, więc wyszedłem bez zmian default-ssl.conf. Miałem zamiar zmienić nazwę mycertna ssl-cert-snakeoilale ten plik już istnieje, więc po prostu stosować to! Mogłem więc bezpiecznie pominąć dwa kroki na Debianie.
Rolf
@Rolf Zgadzam się z tobą, ale w produkcji zawsze jest tak, że używasz nowego certyfikatu i klucza. Aby pokazać, jak można je stworzyć, dodałem 2 dodatkowe kroki dla Debiana. Dzięki :)
Dinesh Kumar
9

Windows + Apache 2.4, na przykład:

  1. odkomentuj ssl_module w twoim httpd.confpliku.

    LoadModule ssl_module modules/mod_ssl.so
    
  2. posłuchaj portu 443, podobnie jak 80 portów w twoim httpd.confpliku.

    Listen 80
    Listen 443
    
  3. odkomentuj Dołącz wirtualne hosty do swojego httpd.confpliku.

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    
  4. dodaj VirtualHost do swojego conf/extra/httpd-vhosts.conf

    <VirtualHost _default_:443>
        DocumentRoot "D:/www"  #your site directory path
        ServerName localhost
        #ServerAlias localhost.com localhost2.com
        SSLEngine on
        SSLCertificateFile "${SRVROOT}/conf/ssl/server.crt"
        SSLCertificateKeyFile "${SRVROOT}/conf/ssl/server.key"
        <Directory "D:/www">
            Options -Indexes +FollowSymLinks +ExecCGI
            AllowOverride All
            Require all granted
        </Directory>
    </VirtualHost>
    

tylko numer portu 443i SSL......linie różnią się od normalnej konfiguracji http.

zapisz plik konfiguracyjny i uruchom ponownie usługę Apache. następnie możesz odwiedzić https: // localhost /

Przeglądarka internetowa ostrzeże Cię po raz pierwszy, że jest niebezpieczna, po prostu wybierz opcję kontynuuj.

cuixiping
źródło
Działa to dla mnie na XP Home, Apache 2.4. Skopiowałem 2 pliki certyfikatów z poprzedniego postu (autor: Anil Gupta). Niekomentowany mod_ssl i dołączony httpd-vhosts.conf do httpd.conf, dodał dyrektywę VirtualHost Anila Gupty (z pewnymi ścieżkami dostosowanymi) w httpd-vhosts.conf.
jogi99
7

To jest naprawdę dość łatwe, zakładając, że masz pod ręką instalację openssl. (Na jakiej platformie jesteś?)

Zakładając, że jesteś na Linuksie / Solaris / Mac OS / X, Van Apache SSL / TLS mini-HOWTO ma doskonały przewodnik, którego nie będę tutaj reprodukować.

Jednak streszczenie jest takie, że musisz utworzyć samopodpisany certyfikat. Ponieważ uruchamiasz apache dla hosta lokalnego prawdopodobnie w celach programistycznych (tj. Nie jest to publiczny serwer WWW), będziesz wiedział, że możesz zaufać samopodpisanemu certyfikatowi i możesz zignorować ostrzeżenia, które wyświetli ci przeglądarka.

Pete Clark
źródło
Cześć, pracuję w systemie operacyjnym Windows. A jeśli chodzi o samopodpisany certyfikat, czy muszę go pobrać, czy w jakikolwiek inny sposób?
KennC.
3
Nie. Sam zrobisz samopodpisany certyfikat. Czy masz konfigurację apache httpd + ssl? Aby to zrobić, będziesz potrzebować ssl. Ta strona: rubayathasan.com/tutorial/apache-ssl-on-windows ma dobre informacje na temat uzyskiwania ssl w systemie Windows. Będziesz wykonywał pewne operacje w wierszu poleceń, ale i tak jest to dla ciebie dobre. :-)
Pete Clark,
3
Linki nie żyją :(
kpuccino
Tak - wygląda na martwą. To jest internet dla ciebie ... Jednak link do Wiki CentOS poniżej, do którego odwołuje się @kayakinkoder, jest również dobry: wiki.centos.org/HowTos/Https Jeśli piszesz na komputerze Mac, ten zapis wygląda również rozsądnie: gist. github.com/nrollr/4daba07c67adcb30693e
Pete Clark
4

To powinno działać Ubuntu, Mint podobny do Apache2

To fajny przewodnik, więc podążaj za tym

https://www.digitalocean.com/community/tutorials/how-to-create-a-ssl-certificate-on-apache-for-ubuntu-14-04

i pozostawiając swój ssl.conf w ten lub podobny sposób

<VirtualHost _default_:443>
        ServerAdmin [email protected]
        ServerName localhost
        ServerAlias www.localhost.com

        DocumentRoot /var/www


    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/apache.crt
    SSLCertificateKeyFile /etc/apache2/ssl/apache.key

Możesz to dostać.

Mam nadzieję, że ta pomoc dla Linuksa

ackuser
źródło
2

To jest bardzo proste,

po prostu uruchom następujące polecenia

sudo a2enmod ssl

sudo service apache2 restart

sudo a2ensite default-ssl.conf

To już koniec.

Jeśli chcesz wymusić SSL (zawsze używać https), edytuj plik:

sudo nano /etc/apache2/sites-available/000-default.conf

i dodaj tę jedną linię

<VirtualHost *:80>
        . . .

        Redirect "/" "https://your_domain_or_IP/"

        . . .
</VirtualHost>

następnie uruchom ponownie

sudo service apache2 restart
Moh .S
źródło
I trzeba uruchomić systemctl reload apache2po sudo a2ensite default-ssl.conf.
do
2

Aktualizacja 2019

Publikuję tę odpowiedź, ponieważ sam zmagałem się z tym, a Chrome zaktualizował swoje zabezpieczenia, wymagając alternatywnej nazwy podmiotu, której nie ma wiele postów, ponieważ nie było to wymagane, gdy zostały opublikowane jako odpowiedź. Zakładam, że WAMP jest już zainstalowany.

KROK 1

Pobierz OpenSSL Light i zainstaluj


KROK 2 (opcjonalnie)

Chociaż ta część jest opcjonalna, ale ułatwia późniejsze wykonywanie poleceń. Jeśli pominiesz ten krok, musisz podać pełną ścieżkę do openssl.exe, w którym wykonasz polecenie. Jeśli wolisz to ustawić, zaktualizuj ścieżkę openssl.exe w Zmiennych środowiskowych.

Zmienne środowiskowe -> Zmienne systemowe -> Ścieżka -> Edytuj -> Nowe -> c: \ Program Files \ OpenSSL-Win64 \ bin


KROK 3

Utwórz folder o nazwie „klucz” w c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/katalogu.

Utwórz plik konfiguracyjny dla swojego CA MyCompanyCA.cnf z zawartością (możesz go zmienić do swoich potrzeb):

[ req ]
distinguished_name  = req_distinguished_name
x509_extensions     = root_ca

[ req_distinguished_name ]
countryName             = Country Name (2 letter code)
countryName_min         = 2
countryName_max         = 2
stateOrProvinceName     = State or Province Name (full name)
localityName            = Locality Name (eg, city)
0.organizationName      = Organization Name (eg, company)
organizationalUnitName  = Organizational Unit Name (eg, section)
commonName              = Common Name (eg, fully qualified host name)
commonName_max          = 64
emailAddress            = Email Address
emailAddress_max        = 64

[ root_ca ]
basicConstraints            = critical, CA:true

Utwórz plik konfiguracyjny rozszerzeń MyCompanyLocalhost.ext dla certyfikatu serwera WWW:

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

[alt_names]
DNS.1   = localhost
DNS.2   = mycy.mycompany.com


KROK 4

Wykonaj następujące polecenia w podanej kolejności, aby wygenerować klucz i certyfikaty:

openssl req -x509 -newkey rsa:2048 -out MyCompanyCA.cer -outform PEM -keyout MyCompanyCA.pvk -days 10000 -verbose -config MyCompanyCA.cnf -nodes -sha256 -subj "/CN=MyCompany CA"
openssl req -newkey rsa:2048 -keyout MyCompanyLocalhost.pvk -out MyCompanyLocalhost.req -subj /CN=localhost -sha256 -nodes
openssl x509 -req -CA MyCompanyCA.cer -CAkey MyCompanyCA.pvk -in MyCompanyLocalhost.req -out MyCompanyLocalhost.cer -days 10000 -extfile MyCompanyLocalhost.ext -sha256 -set_serial 0x1111

W rezultacie będziesz mieć pliki MyCompanyCA.cer , MyCompanyLocalhost.cer i MyCompanyLocalhost.pvk .


KROK 5

Zainstaluj MyCompanyCA.cer pod

Panel sterowania -> Zarządzaj certyfikatami użytkowników -> Zaufane główne urzędy certyfikacji -> Certyfikaty

Aby zainstalować MyCompanyLocalhost.cer, wystarczy dwukrotnie kliknąć.


KROK 6

Otwórz c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/httpd.confi anuluj komentarz (usuń #) następujące 3 linie:

LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so


KROK 7

Otwórz c:/wamp64/bin/apache/apache2.4.37/conf/extra/httpd-ssl.confi zmień wszystkie parametry na te pokazane poniżej:

Directory "c:/wamp64/www"
DocumentRoot "c:/wamp64/www"
ServerName localhost:443
ServerAdmin [email protected]
ErrorLog "c:/wamp64/bin/apache/apache2.4.27/logs/error.log"
TransferLog "c:/wamp64/bin/apache/apache2.4.27/logs/access.log"
SSLCertificateFile "c:/wamp64/bin/apache/apache2.4.27/conf/key/MyCompanyLocalhost.cer"
SSLCertificateKeyFile "c:/wamp64/bin/apache/apache2.4.27/conf/key/MyCompanyLocalhost.pvk"
SSLSessionCache "shmcb:c:/wamp64/bin/apache/apache2.4.27/logs/ssl_scache(512000)"
CustomLog "c:/wamp64/bin/apache/apache2.4.27/logs/ssl_request.log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Uwaga: To trudna część. Jeśli popełnisz mały błąd podczas edycji tego pliku, SSL nie będzie działać. Zrób jego kopię przed edycją.


KROK 8

Uruchom ponownie Wampa i Chrome. Localhost jest teraz bezpieczny: https: // localhost

CodeWarrior
źródło
1

To HowTo dla CentOS było łatwe do naśladowania i zajęło tylko około 5 minut: https://wiki.centos.org/HowTos/Https

Nie będę tutaj szczegółowo opisywać każdego kroku, ale główne kroki to:

1.) Zainstaluj moduł openssl dla apache, jeśli jeszcze nie został zainstalowany

2.) Wygeneruj samopodpisany certyfikat

- W tym momencie powinieneś móc pomyślnie odwiedzić https: // localhost

3.) W razie potrzeby skonfiguruj hosta wirtualnego

KayakinKoder
źródło
1

Działa to w systemie Windows 10 z Apache24:

1 - Dodaj to na dole C:/Apache24/conf/httpd.conf

Listen 443
<VirtualHost *:443>
    DocumentRoot "C:/Apache24/htdocs"
    ServerName localhost
    SSLEngine on
    SSLCertificateFile "C:/Apache24/conf/ssl/server.crt"
    SSLCertificateKeyFile "C:/Apache24/conf/ssl/server.key"
</VirtualHost>

2 - Dodaj pliki server.crti server.keydo C:/Apache24/conf/sslfolderu. Zobacz inne odpowiedzi na tej stronie, aby znaleźć te 2 pliki.

Otóż ​​to!

jogi99
źródło
Tak, to działa. Użyłem kroków 1–3 z StephanieQ do wygenerowania certyfikatu, a następnie „openssl x509 -req -in server.csr -signkey server.key -out server.crt” do wygenerowania pliku * .crt z cygwinem.
b3wii
1

tl; dr

ssh -R youruniquesubdomain:80:localhost:3000 serveo.net

Dostęp do lokalnego środowiska można uzyskać z https://youruniquesubdomain.serveo.net

Serveo jest najlepszy

  • Bez rejestracji.
  • Bez instalacji.
  • Ma HTTPS.
  • Dostępne na całym świecie.
  • Możesz określić niestandardową poprawkę, poddomenę.
  • Możesz go hostować samodzielnie, dzięki czemu możesz korzystać z własnej domeny i być zabezpieczonym na przyszłość, nawet jeśli usługa przestanie działać.

Nie mogłem uwierzyć, kiedy znalazłem tę usługę. Oferuje wszystko i jest najłatwiejszy w użyciu. Gdyby istniało takie łatwe i bezbolesne narzędzie dla każdego problemu ...

totymedli
źródło
1

Uruchamianie Apache na Windows 10 tutaj. Nie mogłem przekonać Chrome, by zaufał certyfikatowi postawionemu w pierwszej odpowiedzi przez Simona. Skończyło się na użyciu programu PowerShell do wygenerowania certyfikatu z podpisem własnym.

Krok 1 - Wygeneruj certyfikat z podpisem własnym

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

Krok 2 - Skonfiguruj i wyeksportuj certyfikat

Wpisz Certificatew pasek wyszukiwania systemu Windows, kliknij Manage Computer Certificatessugerowany element panelu sterowania.

W programie zarządzania certyfikatami, który się pojawi (certlm), powinieneś zobaczyć localhostklucz poniżej Personal >> Certificates.

Skopiowałem ten certyfikat do Trusted Root Certification Authorities. Będę szczery, ponieważ nie jestem pewien, czy to konieczne.

Wybierz nowo skopiowany certyfikat, kliknij go dwukrotnie (certyfikat localhost). W trybie certyfikatu kliknij Detailskartę, a następnie Copy to File...przycisk.

Spowoduje to wyświetlenie i Kreatora eksportu. Wybrałem eksport klucza prywatnego, kliknij przycisk Dalej. Zdecydowałem się również Export all extended properties(ponownie, nie jestem pewien, czy było to konieczne). Wybrałem proste hasło ( pass) i domyślne szyfrowanie. Wybierz folder do wyeksportowania i nazwij plik. W razie potrzeby zawsze możesz przenieść plik i zmienić jego nazwę. Dla uproszczenia skopiujmy go do folderu conf w instalacji Apache (w moim przypadku:) i nazwijmy C:\apache\confplik myCert(plik wynikowy będzie .pfxplikiem)

Krok 3 - Konwertuj .pfxplik do użytku z Apache

Odtąd po prostu podążałem za tutorialem tutaj , ale dodam tutaj instrukcje (poprawione dla naszych ustawień) na wypadek, gdyby strona się zawiesiła.

Otwórz wiersz polecenia w /apache/conf/folderze
uruchomić następujące polecenia: Uwaga: Zakłada masz openssl.exew binfolderze w katalogu głównym Apache (powinno to być standardowe default /)

..\bin\openssl pkcs12 -in myCert.pfx -nocerts -out privateKey.pem

Pojawi się monit o podanie hasła, wprowadź dane wprowadzone w kroku 2 podczas eksportowania .pfxpliku. W moim przypadku tak jest pass. Wprowadziłem to samo hasło do frazy PEM i ponownie, aby to zweryfikować. Spowoduje to utworzenie nowego pliku o nazwie privateKey.pemw folderze conf.

Następnie uruchomić

..\bin\openssl rsa -in privateKey.pem -out private.pem

Ponownie pojawi się monit o podanie hasła ( Enter pass phrase for privateKey.pem:), użyj ustawionego hasła privateKey.pem. (W moim przypadku pass).
Powinieneś zobaczyć wiadomość writing RSA keyz nowym plikiem wywołanym private.pemw twoim conf/folderze. To będzie twój SSLCertificateKeyFile.

Teraz, aby wygenerować odpowiedni certyfikat serwera. Biegać:

..\bin\openssl pkcs12 -in myCert.pfx -clcerts -nokeys -out EntrustCert.pem

Pojawi się monit o podanie hasła, wprowadź dane wprowadzone w kroku 2 podczas eksportowania .pfxpliku. Wpisz go, a będziesz mieć plik o nazwie EntrustCert.pemw conffolderze. To jest twój plik SSLCertificateFile

Krok 4 - Skonfiguruj httpd.conf

Użyj nowych plików utworzonych jako klucz i certyfikat serwera. Pamiętaj, aby zmienić katalog główny dokumentu na lokalizację plików!

ServerName localhost:80
Protocols h2 h2c http/1.1
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>

<VirtualHost _default_:443>
  ServerName localhost:443
  DocumentRoot ${SRVROOT}/htdocs/MYSITE
  SSLEngine on
  SSLCertificateFile "${SRVROOT}/conf/EntrustCert.pem"
  SSLCertificateKeyFile "${SRVROOT}/conf/private.pem"
</VirtualHost>

Również w httpd.conf:

  • Upewnij się, że nie LoadModule ssl_module modules/mod_ssl.soma komentarza (nie #z przodu)
  • Brak komentarza LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  • Brak komentarza LoadModule http2_module modules/mod_http2.so
  • Uncomment Include conf/extra/httpd-ssl.conf (UWAGA: Upewnij się, że tam jest plik!)

Mam również curl i otwarte biblioteki ssl zawarte:

# load curl and open ssl libraries
LoadFile "C:\php\libeay32.dll"
LoadFile "C:\php\ssleay32.dll"
LoadFile "C:\php\libssh2.dll"

Te moduły nie powinny być potrzebne, ale zauważę, że mam je włączone:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so

Krok 5 - Konfiguracja httpd-ssl.conf

W extra/folderze w conf/folderze powinieneś zobaczyć plik o nazwie httpd-ssl.conf.

5a. ZmieńDocumentRoot - Zmień DocumentRootz domyślnego na katalog, w którym znajdują się twoje pliki.

5b. ZmieńServerName - Zmień ServerNamez domyślnego (coś podobnego www.example.com:443) nalocalhost:443

5c. ZmieńSSLCertificateFile
Zmień SSLCertificateFilez domyślnego ( ${SRVROOT}/conf/server.crt) na${SRVROOT}/conf/EntrustCert.pem

5c. ZmieńSSLCertificateKeyFile
Zmień SSLCertificateKeyFilez domyślnego ( ${SRVROOT}/conf/server.key) na${SRVROOT}/conf/private.pem

Wszystko razem w <VirtualHost _default_:443>tagu.

#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs/MYSITE"
ServerName localhost:443
ServerAdmin [email protected]
ErrorLog "${SRVROOT}/logs/error.log"
TransferLog "${SRVROOT}/logs/access.log"

#   SSL Engine Switch:
#   Enable/Disable SSL for this virtual host.
SSLEngine on

#   Server Certificate:
#   Point SSLCertificateFile at a PEM encoded certificate.  If
#   the certificate is encrypted, then you will be prompted for a
#   pass phrase.  Note that a kill -HUP will prompt again.  Keep
#   in mind that if you have both an RSA and a DSA certificate you
#   can configure both in parallel (to also allow the use of DSA
#   ciphers, etc.)
#   Some ECC cipher suites (http://www.ietf.org/rfc/rfc4492.txt)
#   require an ECC certificate which can also be configured in
#   parallel.
SSLCertificateFile "${SRVROOT}/conf/EntrustCert.pem"
#SSLCertificateFile "${SRVROOT}/conf/server-dsa.crt"
#SSLCertificateFile "${SRVROOT}/conf/server-ecc.crt"

#   Server Private Key:
#   If the key is not combined with the certificate, use this
#   directive to point at the key file.  Keep in mind that if
#   you've both a RSA and a DSA private key you can configure
#   both in parallel (to also allow the use of DSA ciphers, etc.)
#   ECC keys, when in use, can also be configured in parallel
SSLCertificateKeyFile "${SRVROOT}/conf/private.pem"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-dsa.key"
#SSLCertificateKeyFile "${SRVROOT}/conf/server-ecc.key"

Uruchom ponownie Apache

Po dokonaniu tych zmian powinieneś być w stanie zrestartować Apache i przejść do https: // localhost bez ostrzeżenia bezpieczeństwa i małej kłódki!

Zabezpieczony lokalny host

Mam nadzieję, że to komuś pomoże! 😊

Źródła:
1.) Odpowiedź Auri Rahimzadeha na temat utworzenia samopodpisanego certyfikatu
2.) Entrust Datacard - Jak przekonwertować plik .pfx na serwer Apache?

StephanieQ
źródło
0

Inną prostą metodą jest użycie Python Server w Ubuntu.

  1. Wygeneruj server.xml za pomocą następującej komendy w terminalu:

    openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes

    Uwaga: Zakładając, że masz zainstalowany openssl .

  2. Zapisz poniższy kod w pliku o nazwie simple-https-server.pyw dowolnym katalogu, w którym chcesz uruchomić serwer.

    import BaseHTTPServer, SimpleHTTPServer
    import ssl
    
    httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
    httpd.socket = ssl.wrap_socket (httpd.socket, certfile='./server.pem', server_side=True)
    httpd.serve_forever()
    
  3. Uruchom serwer z terminala:

    python simple-https-server.py

  4. Odwiedź stronę pod adresem:

    https://localhost:4443

Dodatkowe uwagi :

  1. Możesz zmienić port w simple-https-server.pypliku w linii

    httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)

  2. Możesz zmienić localhostswój adres IP w tej samej linii powyżej:

    httpd = BaseHTTPServer.HTTPServer(('10.7.1.3', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)

    i uzyskaj dostęp do strony na dowolnym urządzeniu podłączonym do sieci. Jest to bardzo przydatne w przypadkach takich jak „musisz przetestować API GeoLocation HTML5 na telefonie komórkowym, a Chrome ogranicza API tylko w bezpiecznych połączeniach”.

Gist: https://gist.github.com/dergachev/7028596

http://www.piware.de/2011/01/creating-an-https-server-in-python/

Asim KT
źródło
0

Dla tych, którzy używają MacOS, jest to świetny przewodnik https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions, aby skonfigurować lokalne środowisko deweloperskie. W trzeciej części https://getgrav.org/blog/macos-sierra-apache-ssl Andy Miller wyjaśnia, jak skonfigurować apache z certyfikatem z podpisem własnym:

To jest kluczowe polecenie:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt

Ale musisz wykonać kilka kroków, więc sprawdź to i powodzenia! ;)

tiomno
źródło
0

Chciałbym dodać coś do bardzo dobrej odpowiedzi @CodeWarrior, która działa idealnie w Chrome, ale dla Firefox wymaga dodatkowego kroku.

Ponieważ Firefox nie przekazuje certyfikatów CA, które domyślnie robi system Windows, musisz przejść dalej about:config, przewinąć w dół security.enterprise_roots.enabled i zmienić na true.

Teraz twój certyfikat powinien być uważany za ważny również w przeglądarce Firefox.

Oczywiście służy to wyłącznie celom programistycznym, ponieważ zaufanie SSL jest kluczowym problemem bezpieczeństwa i zmieniaj te ustawienia tylko, jeśli znasz implikacje.

RDev
źródło