Come posso consentire HTTPS per Apache su localhost?


Risposte:


135

Ho appena provato a farlo: avevo bisogno di testare un po 'di codice di sviluppo sul mio localhost Apache su Windows . Questo è stato WAAAY più difficile di quanto dovrebbe essere. Ma qui ci sono i passaggi che sono riusciti a funzionare dopo molto hairpulling ...

Ho scoperto che la mia installazione di Apache viene fornita con ciò openssl.exeche è utile. Se non ne hai una copia, dovrai scaricarla. La mia copia era nella Apache2\bincartella che è come la faccio riferimento di seguito.

passi:

  1. Assicurarsi di disporre delle autorizzazioni di scrittura per la cartella conf di Apache
  2. Apri un prompt dei comandi nella Apache2\confcartella
  3. genere
    ..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
  4. Puoi lasciare vuote tutte le domande tranne:

    • Passphrase PEM: una password temporanea come "password"
    • Nome comune: il nome host del tuo server

  5. Al termine, digitare
    ..\bin\openssl rsa -in blarg.pem -out blarg.key

  6. Genera il tuo certificato autofirmato digitando:
    ..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365

  7. Apri il conf\httpd.conffile Apache e assicurati che il modulo SSL sia abilitato - non dovrebbe esserci hash all'inizio di questa riga:
    LoadModule ssl_module modules/mod_ssl.so

  8. Alcune installazioni di Apache collocano la configurazione SSL in un file separato. In tal caso, assicurarsi che il file conf SSL sia incluso. Nel mio caso ho dovuto decommentare questa riga:
    Include conf/extra/httpd-ssl.conf

  9. Nella configurazione SSL httpd-ssl.confho dovuto aggiornare le seguenti righe:

    • Aggiorna
      SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
      a
      SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
      (Le parentesi nel percorso confondono il modulo, quindi dobbiamo evitarle)
    • DocumentRoot - imposta questo nella cartella per i tuoi file web
    • ServerName - il nome host del server
    • SSLCertificateFile "conf/blarg.cert"
    • SSLCertificateKeyFile "conf/blarg.key"

  10. Riavvia Apache.

  11. Prova a caricare https://localhost/nel tuo browser.

Spero che tu sia arrivato così lontano. Sentiti libero di aggiornare questo post con qualsiasi altra informazione utile.

(Schermate per gentile concessione di Neil Obremski e del suo utile articolo , anche se ora non è aggiornato.)


2
Grazie. Ho anche dovuto modificare le direttive ErrorLog, TransferLog e CustomLog in percorsi validi, altrimenti Apache non si avviava.
Tamlyn,

1
Per qualche ragione, le istruzioni non funzionano più o sono incomplete
Jacobian,

6
Ho dovuto decommentare anche quanto segue nel mio httpd.conf per farlo funzionare: LoadModule socache_shmcb_module modules / mod_socache_shmcb.so
erik

1
Ho fatto altri due passaggi per farlo funzionare, aggiungere il modulo LoadModule socache_shmcb_module modules / mod_socache_shmcb.so e in httpd-ssl.conf Correggo il percorso del registro ssl alla riga 250, CustomLog ".apache24 / logs / ssl_request.log" \
Wasim A .

5
Per generare i file .pem e .key, ho dovuto impostare 2 variabili di ambiente al passaggio 2: impostare OPENSSL_CONF = C: \ path \ su \ apache \ Apache2.4.4 \ conf \ openssl.cnf impostare RANDFILE = C: \ percorso \ a \ apache \ Apache2.4.4 \ conf \ .rnd
eosfera

57

Per questo utilizzo ngrok ( https://ngrok.com/ ). ngrok è uno strumento da riga di comando e crea un tunnel per localhost. Crea sia la connessione http che https. Dopo averlo scaricato, è necessario eseguire il comando seguente:

ngrok http 80

(Nella versione 2, la sintassi è: ngrok http 80. Nella versione 2, è possibile eseguire il tunneling di qualsiasi porta.)

Dopo pochi secondi, fornirà due URL:

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

Ora, entrambi gli URL puntano al localhost.


1
@sudip, Il codice opensource di ngrok funziona in modo tale da poterlo ospitare sul nostro server senza modifiche? Altrimenti, è praticamente uno showtopper perché non va bene reindirizzare le richieste degli utenti a un host esterno come ngrok.
Pacerier

2
@Pacerier Non intendo usarlo sul server. Lo uso su localhost (Bcz il mio provider di rete mi dà un IP dinamico). L'ho usato per la prima volta per i test IPN paypal e ha funzionato perfettamente. Mi chiedo perché qualcuno lo userà sul server e per quale scopo.
sudip,

@sudip, Lo scopo è ovvio, consentire al codice che funziona su HTTP di funzionare anche con HTTPS senza che sia necessaria una codifica aggiuntiva.
Pacerier

1
Anche se questo è utile, sembra incredibilmente insicuro consentire l'accesso alla tua macchina di sviluppo a Internet aperto. Usare qualcosa del genere ti farebbe licenziare contro un datore di lavoro attento alla sicurezza.
Andy M,

@YumYumYum. Era completamente gratuito prima in V 1. Ma, le porte http e https sono ancora libere in v 2 (non so se c'è qualche limitazione di porta c'è un piano gratuito). Controlla qui il piano gratuito: ngrok.com/product#pricing
sudip,

24

qui è il modo più semplice per farlo

prima copia questi server.crt & server.key file (trova in allegato) nella tua directory apache / conf / ssl

quindi aprire il file httpd.conf e aggiungere la seguente riga

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>

3
Ho dovuto abilitare anche il modulo LoadModule ssl_module libexec / apache2 / mod_ssl.so in (/etc/apache2/httpd.conf)
Alexey

17
Mi chiedo quanto sia sicuro / pericoloso il download di file * .crt * .key da fonti non attendibili invece di generare i tuoi.
Petr Peller,

4
@PetrPeller stiamo installando https per lo sviluppo locale, quindi perché chiedersi sicurezza / pericolo
Anil Gupta

7
Una spiegazione su come generare quei file sarebbe ottima. Perché scaricare file da una fonte sconosciuta è una cattiva pratica, ma anche perché quel tipo di collegamenti si interromperà ad un certo punto.
Stephan Vierkant,


13

Al fine di proteggere la sicurezza delle informazioni inviate al e dal tuo server Web, è una buona idea abilitare la crittografia della comunicazione tra client e server. Questo è spesso chiamato SSL .

Quindi impostiamo HTTPS con un certificato autofirmato su Apache2. Elencherò i passaggi che dovresti seguire:

  • Installa il web server apache2 sul tuo computer. Per la macchina linux aprire il terminale e digitare

sudo apt-get install apache2

  • Dopo una corretta installazione, controllare lo stato del servizio apache2 eseguendo il comando

sudo service apache2 status

Dovrebbe essere prodotto

stato del servizio apache2

  • Passare al browser e digitare

http: // localhost: 80

Verifica di avere una pagina predefinita per apache2 in questo modo.

output predefinito di apache2

  • Per crittografare una connessione Web abbiamo bisogno del certificato della CA (autorità di certificazione) oppure possiamo usare certificati autofirmati. Creiamo un certificato autofirmato usando il seguente comando.

openssl req -x509 -newkey rsa: 2048 -keyout mykey.key -out mycert.pem -days 365 -nodes

Si prega di compilare le informazioni di conseguenza, come mostrato di seguito.

creare un certificato autofirmato usando openssl

mykey.key e mycert.pem dovrebbero essere creati nella directory di lavoro attuale.

  • Sarebbe bello se spostassimo certificati e chiavi in ​​un luogo comune e sarà facile per loro trovarli sul web server apache2. Quindi eseguiamo i seguenti comandi

sudo cp mycert.pem / etc / ssl / certs

sudo cp mykey.key / etc / ssl / private

  • Abilitiamo la modalità SSL sul tuo server

sudo a2enmod ssl

Dovrebbe essere prodotto in questo modo

abilita ssl

  • Configuriamo apache2 per usare la chiave e il certificato autofirmati che abbiamo generato sopra.

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

Trova queste due righe e sostituiscile con i percorsi cert e key.

Iniziale

default-conf

Finale

dopo le modifiche di configurazione

  • Abilita il sito

cd / etc / apache2 / siti-disponibili /

sudo a2ensite default-ssl.conf

  • Riavvia il servizio apache2

sudo service apache2 restart

  • Verificare il web server apache2 su HTTPS. Apri di nuovo il browser e digita

https: // localhost: 443

Dovrebbe essere emesso qualcosa del genere con un avviso che la pagina che stai per visualizzare non è sicura perché abbiamo configurato il server con certificato autofirmato.

inserisci qui la descrizione dell'immagine

  • Complimenti, hai configurato apache2 con endpoint HTTPS, ora fai clic su Avanzate -> aggiungi eccezione -> conferma l'eccezione di sicurezza , vedrai di nuovo la pagina predefinita.

pagina dopo l'aggiunta dell'eccezione


Preferisco non modificare alcun file di configurazione se posso, quindi ho lasciato default-ssl.confcosì com'è. Stavo per cambiare titolo mycerta ssl-cert-snakeoil, ma questo file esiste già così ho appena usato questo! Quindi sono stato in grado di saltare in sicurezza due passaggi su Debian.
Rolf,

@Rolf Sono d'accordo con te ma in produzione, è sempre il caso di utilizzare un nuovo certificato e chiave. Quindi, solo per mostrare come possono essere creati, ho aggiunto 2 passaggi aggiuntivi per Debian. Grazie :)
Dinesh Kumar il

È possibile aggiungere il mio certificato autofirmato come autorità di certificazione per evitare di visualizzare avvisi?
Aaron Franke,

9

Windows + Apache 2.4, ad esempio:

  1. decommenta ssl_module nel tuo httpd.conffile.

    LoadModule ssl_module modules/mod_ssl.so
    
  2. ascolta la porta 443 proprio come la porta 80 nel tuo httpd.conffile.

    Listen 80
    Listen 443
    
  3. decomment Includi host virtuali nel tuo httpd.conffile.

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    
  4. aggiungi VirtualHost nel tuo 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>
    

solo il numero di porta 443eSSL...... linee sono diversi dalla normale configurazione http.

salva il tuo file di configurazione e riavvia il servizio apache. allora puoi visitare https: // localhost /

Il browser Web ti avviserà che non è sicuro per la prima volta, basta scegliere continua.


Questo ha funzionato per me su XP Home, Apache 2.4. Copiato i 2 file del certificato dal post precedente (di Anil Gupta). Mod_ssl non commentato e incluso httpd-vhosts.conf in httpd.conf, ha aggiunto la direttiva VirtualHost di Anil Gupta (con alcuni percorsi adattati) in httpd-vhosts.conf.
jogi99

7

In realtà è abbastanza semplice, supponendo che tu abbia un'installazione di openssl a portata di mano. (Su che piattaforma sei?)

Supponendo che tu sia su linux / solaris / mac os / x, il mini-HOWTO di Apache SSL / TLS di Van ha una soluzione eccellente che non riprodurrò qui.

Tuttavia, il riepilogo esecutivo è che è necessario creare un certificato autofirmato. Dato che stai eseguendo apache per localhost presumibilmente per lo sviluppo (cioè non un server web pubblico), saprai che puoi fidarti del certificato autofirmato e ignorare gli avvisi che il tuo browser ti lancerà.


Ciao, sto lavorando su sistema operativo Windows. E per quanto riguarda il certificato autofirmato, devo scaricarlo o con qualsiasi altro mezzo?
KennC.

3
No. Farai auto-firmare te stesso. Hai l'installazione apache httpd + ssl? Per fare ciò avrai bisogno dell'SSL. Questo sito: rubayathasan.com/tutorial/apache-ssl-on-windows ha buone informazioni su come far funzionare ssl su windows. Farai un po 'di lavoro da riga di comando, ma è comunque buono per te. :-)
Pete Clark,

3
Il link è morto :(
kpuccino

Sì, sembra essere morto. Questa è Internet per te ... Tuttavia, anche il link al Wiki CentOS di seguito a cui fa riferimento @kayakinkoder è buono: wiki.centos.org/HowTos/Https Se sei su un Mac, anche questo commento sembra ragionevole: gist. github.com/nrollr/4daba07c67adcb30693e
Pete Clark

4

Questo dovrebbe funzionare Ubuntu, simile alla menta con Apache2

È una bella guida, quindi seguendo questo

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

e lasciando il tuo ssl.conf simile o simile

<VirtualHost _default_:443>
        ServerAdmin your@email.com
        ServerName localhost
        ServerAlias www.localhost.com

        DocumentRoot /var/www


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

Puoi prenderlo.

Spero che questo aiuto per Linux


3

Aggiornamento 2020

Sto pubblicando questa risposta da quando ho lottato con questo me stesso e Chrome ha aggiornato la loro sicurezza con la richiesta di un nome alternativo soggetto che molti post non hanno come non era richiesto quando sono stati pubblicati come risposta. Suppongo che WAMP sia già installato.

PASSO 1

Scarica OpenSSL Light e installalo


** PASSAGGIO 2 (Opzionale) **

Sebbene questa parte sia facoltativa, ma in seguito semplifica l'esecuzione dei comandi. Se salti questo passaggio, dovrai fornire il percorso completo di openssl.exe dove eseguirai il comando. Se si preferisce impostarlo, aggiornare il percorso openssl.exe in Variabili d'ambiente.

Variabili d'ambiente -> Variabili di sistema -> Percorso -> Modifica -> Nuovo -> c: \ Programmi \ OpenSSL-Win64 \ bin


** PASSAGGIO 3 **

Creare una cartella denominata "chiave" nella c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/directory.

Creare il file di configurazione per CA MyCompanyCA.cnf con i contenuti (è possibile modificarlo in base alle proprie esigenze):

[ 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

Crea il file di configurazione delle estensioni MyCompanyLocalhost.ext per il tuo certificato del server web:

subjectAltName = @alt_names
extendedKeyUsage = serverAuth

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

** PASSAGGIO 4 **

Eseguire questi comandi nell'ordine indicato per generare la chiave e i certificati:

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

Di conseguenza, avrai i file MyCompanyCA.cer , MyCompanyLocalhost.cer e MyCompanyLocalhost.pvk .


** PASSAGGIO 5 **

Installa MyCompanyCA.cer sotto

Pannello di controllo -> Gestisci certificati utente -> Autorità di certificazione radice attendibili -> Certificati

Per installare MyCompanyLocalhost.cer basta fare doppio clic su di esso.


** PASSAGGIO 6 **

Apri c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/httpd.confe annulla commento (rimuovi il #) le seguenti 3 righe:

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

** PASSO 7 **

Apri c:/wamp64/bin/apache/apache2.4.37/conf/extra/httpd-ssl.confe modifica tutti i parametri con quelli mostrati di seguito:

Directory "c:/wamp64/www"
DocumentRoot "c:/wamp64/www"
ServerName localhost:443
ServerAdmin admin@example.com
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"

Nota: questa è la parte difficile. Se commetti qualche piccolo errore durante la modifica di questo file, SSL non funzionerà. Creane una copia prima di modificarlo.


** PASSO 8 **

Riavvia Wamp e Chrome. Localhost è ora sicuro: https: // localhost


Hai una guida per Linux?
Aaron Franke,

Sfortunatamente no.
CodeWarrior il

2

È molto semplice,

basta eseguire i seguenti comandi

sudo a2enmod ssl

sudo service apache2 restart

sudo a2ensite default-ssl.conf

Ecco fatto, il gioco è fatto.

Se vuoi forzare SSL (per usare sempre https), modifica il file:

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

e aggiungi questa riga

<VirtualHost *:80>
        . . .

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

        . . .
</VirtualHost>

quindi riavviare di nuovo

sudo service apache2 restart

E devi correre systemctl reload apache2dietro sudo a2ensite default-ssl.conf.
fino al

1

Questo HowTo per CentOS è stato facile da seguire e ha impiegato solo circa 5 minuti: https://wiki.centos.org/HowTos/Https

Non descriverò in dettaglio ogni passaggio qui, ma i passaggi principali sono:

1.) Installa il modulo openssl per apache, se non è già installato

2.) Generare un certificato autofirmato

- A questo punto, dovresti essere in grado di visitare correttamente https: // localhost

3.) Configurare un host virtuale, se necessario


1

Questo ha funzionato su Windows 10 con Apache24:

1 - Aggiungi questo in fondo a 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 - Aggiungi i file server.crte server.keynella C:/Apache24/conf/sslcartella. Vedi altre risposte in questa pagina per trovare quei 2 file.

Questo è tutto!


Sì, funziona. Ho usato i passaggi 1-3 di StephanieQ per generare il certificato e poi "openssl x509 -req -in server.csr -signkey server.key -out server.crt" per generare il file * .crt con cygwin.
b3wii,

Non ho un httpd.conf, in quale file lo metto? Ecco cosa succede quando inserisco questo testo apache2.conf:Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration
Aaron Franke il

1

tl; dr

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

E il tuo ambiente locale è accessibile da https://youruniquesubdomain.serveo.net

Serveo è il migliore

  • Nessuna iscrizione
  • Nessuna installazione.
  • Ha HTTPS.
  • Accessibile in tutto il mondo.
  • Puoi specificare una correzione personalizzata, sottodominio.
  • Puoi ospitarlo autonomamente, in modo da poter utilizzare il tuo dominio ed essere a prova di futuro, anche se il servizio non funziona.

Non ci potevo credere quando ho trovato questo servizio. Offre tutto ed è il più semplice da usare. Se ci fosse uno strumento così facile e indolore per ogni problema ...


Questo non funziona più nel 2020, la pagina si carica per sempre. Tuttavia, per qualche motivo il comando SSH funziona ancora ...?
Aaron Franke,

1

Esecuzione di Apache su Windows 10 qui. Non sono riuscito a convincere Chrome a fidarmi del certificato rilasciato nella risposta migliore di Simon. Quello che ho finito per fare è stato usare PowerShell per generare un certificato autofirmato.

Passaggio 1: generare un certificato autofirmato

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

Passaggio 2: configura ed esporta certificato

Digita Certificatenella barra di ricerca di Windows, fai clic Manage Computer Certificatessull'elemento del pannello di controllo che ti viene suggerito.

Dal programma di gestione dei certificati che viene visualizzato (certlm), ora dovresti vedere una localhostchiave sotto Personal >> Certificates.

Ho copiato questo certificato in Trusted Root Certification Authorities. Sarò onesto in quanto non sono sicuro che sia necessario.

Selezionando il certificato appena copiato, fare doppio clic su di esso (il certificato localhost). Dal certificato modale, fai clic sulla Detailsscheda, quindi sul Copy to File...pulsante.

Verrà visualizzato ed Esporta procedura guidata, ho scelto di esportare la chiave privata, fare clic su Avanti. Ho anche scelto di Export all extended properties(di nuovo, non sono sicuro se fosse necessario). Ho scelto di utilizzare una semplice password ( pass) e la crittografia predefinita. Scegli una cartella in cui esportare e dai un nome al file. Puoi sempre spostare e rinominare il file se necessario. Per semplicità, copiamolo nella cartella conf sotto l'installazione di Apache (nel mio caso:) C:\apache\confe denominiamo il file myCert(il file risultante sarà un .pfxfile)

Passaggio 3: converti il .pfxfile per utilizzarlo con Apache

Da qui ho praticamente seguito il tutorial qui , ma aggiungerò qui le istruzioni (ottimizzate per le nostre impostazioni) nel caso in cui il sito non funzioni.

Apri il Prompt dei comandi nella /apache/conf/cartella
Esegui i seguenti comandi: Nota: questo presuppone che tu abbia openssl.exenella bincartella nella cartella principale di Apache (dovrebbe essere standard / predefinito)

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

Questo ti chiederà una password, inserisci cosa hai inserito per il passaggio 2 quando hai esportato il .pfxfile. Nel mio caso, questo è pass. Ho inserito la stessa password per la frase PEM e di nuovo per verificare. Questo creerà un nuovo file chiamato privateKey.pemnella tua cartella conf.

Quindi, corri

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

Ancora una volta ti verrà richiesta una password ( Enter pass phrase for privateKey.pem:), usa la password impostata privateKey.pem. (Nel mio caso, pass)
Dovresti vedere un messaggio che dice writing RSA keye un nuovo file chiamato private.pemnella tua conf/cartella. Questo sarà il tuo SSLCertificateKeyFile.

Ora per generare il corrispondente certificato server. Correre:

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

Questo ti chiederà una password, inserisci cosa hai inserito per il passaggio 2 quando hai esportato il .pfxfile. Inseriscilo e ora avrai un file chiamato EntrustCert.pemnella tua confcartella. Questo è il tuo SSLCertificateFile

Passaggio 4: configura httpd.conf

Utilizzare i nuovi file creati come chiave e certificato del server. Assicurati di cambiare la radice del documento nella posizione in cui si trovano i tuoi file!

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>

Anche in httpd.conf:

  • Assicurati che LoadModule ssl_module modules/mod_ssl.sosia senza commento (no #davanti)
  • Rimuovere il commento LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  • Rimuovere il commento LoadModule http2_module modules/mod_http2.so
  • Uncomment Include conf/extra/httpd-ssl.conf (NOTA: assicurarsi che sia dove si trova il file!)

Ho anche incluso le librerie curl e open ssl:

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

Questi moduli non dovrebbero essere necessari, ma noterò che li ho abilitati:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so

Passaggio 5: Config httpd-ssl.conf

Nella extra/cartella nella conf/cartella dovresti vedere un file chiamato httpd-ssl.conf.

5a. Modificare ilDocumentRoot - Modificare il DocumentRootdal default alla directory in cui i file sono.

5b. Cambia ilServerName - Cambia il ServerNameda predefinito (qualcosa di simile www.example.com:443) alocalhost:443

5c. Cambia ilSSLCertificateFile
Cambia il SSLCertificateFileda predefinito ( ${SRVROOT}/conf/server.crt) a${SRVROOT}/conf/EntrustCert.pem

5c. Cambia ilSSLCertificateKeyFile
Cambia il SSLCertificateKeyFileda predefinito ( ${SRVROOT}/conf/server.key) a${SRVROOT}/conf/private.pem

Tutti insieme, nel <VirtualHost _default_:443>tag.

#   General setup for the virtual host
DocumentRoot "${SRVROOT}/htdocs/MYSITE"
ServerName localhost:443
ServerAdmin admin@example.com
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"

Riavvia Apache

Dopo aver apportato queste modifiche dovresti essere in grado di riavviare Apache e passare a https: // localhost senza un avviso di sicurezza e un piccolo lucchetto!

Localhost protetto

Spero che questo aiuti qualcuno! 😊

Fonti:
1.) La risposta di Auri Rahimzadeh sulla creazione di un certificato autofirmato
2.) Entrust Datacard - Come posso convertire un .pfx da usare con un server Apache?


0

Un altro metodo semplice sta usando Python Server in Ubuntu.

  1. Generare server.xml con il seguente comando nel terminale:

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

    Nota: supponendo che avete installato openssl .

  2. Salvare il codice seguente in un file denominato simple-https-server.pyin qualsiasi directory in cui si desidera eseguire il server.

    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. Esegui il server dal terminale:

    python simple-https-server.py

  4. Visita la pagina all'indirizzo:

    https://localhost:4443

Note extra ::

  1. È possibile modificare la porta nel simple-https-server.pyfile in linea

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

  2. Puoi passare localhostal tuo IP nella stessa riga sopra:

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

    e accedi alla pagina su qualsiasi dispositivo connesso alla tua rete. Ciò è molto utile in casi come "devi testare l'API GeoLocation HTML5 in un dispositivo mobile e Chrome limita l'API solo nelle connessioni sicure".

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

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


0

Per coloro che usano macOS questa è un'ottima guida https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions per configurare l'ambiente di sviluppo web locale. Nella sua terza parte https://getgrav.org/blog/macos-sierra-apache-ssl Andy Miller spiega come configurare apache con un certificato autofirmato:

Questo è il comando chiave:

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

Ma ci sono alcuni passaggi che devi seguire, quindi dai un'occhiata e buona fortuna! ;)


0

Vorrei aggiungere qualcosa all'ottima risposta di @CodeWarrior, che funziona perfettamente su Chrome, ma per Firefox è necessario un ulteriore passaggio.

Poiché Firefox non applica i certificati CA che Windows utilizza per impostazione predefinita, è necessario andare avanti about:config, scorrere verso il basso fino asecurity.enterprise_roots.enabled e cambiarlo in vero.

Ora il tuo certificato dovrebbe essere considerato valido anche su Firefox.

Naturalmente questo è solo a scopo di sviluppo, poiché la fiducia ssl è una preoccupazione fondamentale per la sicurezza e cambia queste impostazioni solo se conosci le implicazioni.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.