web-dev-qa-db-pt.com

Como eu permito o HTTPS para o Apache no localhost?

Fui solicitado a configurar o HTTPS com um certificado autoassinado no Apache no localhost, mas como faço isso? Eu não tenho ideia de nada.

185
KennC.

Eu apenas tentei isso - eu precisava testar algum código de desenvolvimento no meu Apache localhost no Windows . Este foi WAAAY mais difícil do que deveria ser. Mas aqui estão os passos que conseguiram trabalhar depois de muito hairpulling ...

Descobri que minha instalação do Apache vem com openssl.exe que é útil. Se você não tiver uma cópia, precisará baixá-la. Minha cópia estava na pasta Apache2\bin, que é como eu faço referência abaixo.

Passos:

  1. Certifique-se de ter permissões de gravação para sua pasta conf do Apache
  2. Abra um prompt de comando na pasta Apache2\conf
  3. Tipo
    ..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
  4. Você pode deixar todas as questões em branco, exceto:

    • PEM Passphrase: uma senha temporária, como "senha"
    • Nome comum: o nome do host do seu servidor

  5. Quando isso terminar, digite
    ..\bin\openssl rsa -in blarg.pem -out blarg.key

  6. Gere seu certificado autoassinado digitando:
    ..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365

  7. Abra o arquivo conf\httpd.conf do Apache e assegure-se de que o módulo SSL esteja ativado - não deve haver hash no início desta linha:
    LoadModule ssl_module modules/mod_ssl.so

  8. Algumas instalações do Apache colocam a configuração SSL em um arquivo separado. Nesse caso, verifique se o arquivo SSL conf está sendo incluído. No meu caso eu tive que descomentar esta linha:
    Include conf/extra/httpd-ssl.conf

  9. Na configuração SSL httpd-ssl.conf eu tive que atualizar as seguintes linhas:

    • Atualizar
      SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
      para
      SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
      (Os parênteses no caminho confundem o módulo, então precisamos escapar deles)
    • DocumentRoot - define isso para a pasta dos seus arquivos da web
    • ServerName - o nome do host do servidor
    • SSLCertificateFile "conf/blarg.cert"
    • SSLCertificateKeyFile "conf/blarg.key"

  10. Reinicie o Apache.

  11. Tente carregar https://localhost/ no seu navegador.

Espero que você tenha chegado tão longe. Sinta-se à vontade para atualizar este post com outras informações úteis.

(Screenshots cortesia de Neil Obremski e sua ajuda artigo - embora agora bastante desatualizado.)

126
Simon East

Eu uso o ngrok ( https://ngrok.com/ ) para isso. O ngrok é uma ferramenta de linha de comando e cria um túnel para o host local. Ele cria conexões http e https. Depois de baixá-lo, o seguinte comando precisa ser executado:

ngrok http 80

(Na versão 2, a sintaxe é: ngrok http 80. Na versão 2, qualquer porta pode ser encapsulada.)

Depois de alguns segundos, ele dará dois urls:

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

Agora, os dois URLs apontam para o host local.

55
sudip

aqui é a maneira mais simples de fazer isso

copie primeiro estes arquivos server.crt & server.key (localize em anexo) no seu diretório Apache/conf/ssl

abra o arquivo httpd.conf e adicione a seguinte linha

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>
23
Anil Gupta

Para proteger a segurança das informações enviadas para e do servidor da Web, convém ativar a criptografia da comunicação entre os clientes e o servidor. Isso geralmente é chamado SSL.

Então, vamos configurar o HTTPS com um certificado autoassinado no Apache2. Vou listar os passos que você deve seguir:

  • Instale o servidor web Apache2 em sua máquina. Para máquina linux abra o terminal e digite

Sudo apt-get instala o Apache2

  • Após a instalação bem-sucedida, verifique o status do serviço Apache2 executando o comando

Serviço Sudo Apache2 status

Deve sair

Apache2 service status

  • Navegue até o navegador e digite

http: // localhost: 8

Verifique se você obtém a página padrão do Apache2 dessa forma.

default output of Apache2

  • Para criptografar uma conexão da web, precisamos de certificado da CA (autoridade de certificação) ou podemos usar certificados autoassinados. Vamos criar um certificado autoassinado usando o seguinte comando.

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

Por favor, preencha as informações em conformidade, conforme mostrado abaixo.

create self signed certificate using openssl

mykey.key e mycert.pem devem ser criados no seu trabalho atual diretório.

  • Seria legal se movermos certificados e chaves em um lugar comum e será fácil para o servidor da web Apache2 encontrá-los. Então vamos executar os seguintes comandos

Sudo cp mycert.pem/etc/ssl/certs

Sudo cp mykey.key/etc/ssl/private

  • Vamos habilitar o modo SSL no seu servidor

Sudo a2enmod ssl

Deve sair assim

enable ssl

  • Vamos configurar o Apache2 para usar o certificado auto-assinado e a chave que geramos acima.

Sudo vi /etc/Apache2/sites-available/default-ssl.conf

Por favor, encontre essas duas linhas e substitua-as por seus caminhos cert e key.

Inicial

default-conf

Final

after config changes

  • Ativar o site

cd/etc/Apache2/sites-disponíveis /

Sudo a2ensite default-ssl.conf

  • Reinicie o serviço Apache2

Serviço Sudo Apache2 restart

  • Verifique o servidor da web Apache2 em HTTPS. Abra seu navegador novamente e digite

https: // localhost: 44

Ele deve emitir algo como isto com um aviso de que a página que você está prestes a ver não é segura porque configuramos o servidor com um certificado autoassinado.

enter image description here

  • Parabéns você configurou seu Apache2 com endpoint HTTPS, agora clique em advanced -> add exception -> confirmar exceção de segurança , você verá a página padrão novamente.

page after adding exception

9
Dinesh Kumar

Windows + Apache 2.4, por exemplo:

  1. descomente o ssl_module no seu arquivo httpd.conf.

    LoadModule ssl_module modules/mod_ssl.so
    
  2. escute a porta 443 como a porta 80 no seu arquivo httpd.conf.

    Listen 80
    Listen 443
    
  3. uncomment Incluir hosts virtuais no seu arquivo httpd.conf.

    # Virtual hosts
    Include conf/extra/httpd-vhosts.conf
    
  4. adicione o VirtualHost no seu 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>
    

somente as linhas do número da porta 443 e SSL...... são diferentes da configuração normal do http.

salve seu arquivo de configuração e reinicie o serviço Apache. então você pode visitar https: // localhost /

O navegador da Web avisará que não é seguro na primeira vez, basta escolher continuar.

9
cuixiping

É realmente muito fácil, supondo que você tenha uma instalação openssl à mão. (Em que plataforma você está?)

Supondo que você esteja em linux/solaris/mac os/x, o mini-HOWTO do Van Apache SSL/TLS tem um excelente passo a passo que não vou reproduzir aqui.

No entanto, o resumo executivo é que você precisa criar um certificado autoassinado. Como você está executando o Apache para localhost presumivelmente para desenvolvimento (ou seja, não é um servidor da web público), você saberá que pode confiar no certificado autoassinado e ignorar os avisos que o seu navegador lançará em você.

8
Pete Clark

Isso deve funcionar Ubuntu, Mint semelhante ao Apache2

É um guia de Nice, então seguindo este

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

e deixando seu ssl.conf como este ou semelhante similar

<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

você pode conseguir isso.

Espero que esta ajuda para linuxer

4
ackuser

É muito simples,

apenas execute os seguintes comandos

Sudo a2enmod ssl

Sudo service Apache2 restart

Sudo a2ensite default-ssl.conf

É isso aí, você está feito.

Se você quiser forçar o SSL (para usar sempre https), edite o arquivo:

Sudo nano /etc/Apache2/sites-available/000-default.conf

e adicione esta linha

<VirtualHost *:80>
        . . .

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

        . . .
</VirtualHost>

em seguida, reinicie novamente

Sudo service Apache2 restart
2
Rifaideen

tl; dr

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

E o seu ambiente local pode ser acessado de https://youruniquesubdomain.serveo.net

Serveo é o melhor

  • Nenhuma inscrição.
  • Sem instalação.
  • Tem HTTPS.
  • Acessível em todo o mundo.
  • Você pode especificar uma correção personalizada, subdomínio.
  • Você pode hospedá-lo automaticamente, para que possa usar seu próprio domínio e ter uma prova futura, mesmo que o serviço fique inativo.

Eu não pude acreditar quando encontrei este serviço. Oferece tudo e é o mais fácil de usar. Se houvesse uma ferramenta tão fácil e indolor para cada problema ...

1
totymedli

Este HowTo para o CentOS foi fácil de seguir e levou apenas cerca de 5 minutos: https://wiki.centos.org/HowTos/Https

Eu não vou detalhar cada passo aqui, mas os principais passos são:

1.) Instale o módulo openssl para o Apache, se ainda não estiver instalado

2.) Gere um certificado autoassinado

- Nesse ponto, você deve poder visitar https: // localhost com sucesso

3.) Configurar um host virtual, se necessário

1
KayakinKoder

Isso funcionou no Windows 10 com Apache24:

1 - Adicione isso na parte inferior de 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 - Adicione os arquivos server.crt e server.key na pasta C:/Apache24/conf/ssl. Veja outras respostas nesta página para encontrar esses 2 arquivos.

É isso aí!

1
jogi99

Para aqueles que usam macOS este é um ótimo guia https://getgrav.org/blog/macos-sierra-Apache-multiple-php-versions para configurar seu ambiente local de desenvolvimento web. Em sua terceira parte https://getgrav.org/blog/macos-sierra-Apache-ssl Andy Miller explica como configurar o Apache com um certificado autoassinado:

Este é o comando chave:

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

Mas há alguns passos que você precisa seguir, então confira e boa sorte! ;)

0
tiomno

Correndo o Apache no Windows 10 aqui. Eu não pude obter Chrome para confiar no certificado feito na resposta principal pelo Simon. O que acabei fazendo foi usar o PowerShell para gerar um certificado autoassinado.

Etapa 1 - Gerar certificado autoassinado

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

Etapa 2 - Configurar e exportar certificado

Digite Certificate na barra de pesquisa do Windows, clique no item do painel de controle Manage Computer Certificates que é sugerido.

No programa de Gerenciamento de Certificados que aparece (certlm), você deve ver agora uma chave localhost em Personal >> Certificates.

Eu copiei este certificado para Trusted Root Certification Authorities. Eu vou ser honesto em que eu não tenho certeza se é necessário.

Selecionando o certificado recém-copiado, clique duas vezes nele (o certificado localhost). No modal do certificado, clique na guia Details e, em seguida, no botão Copy to File....

Isso abrirá e exportar assistente, eu escolhi para exportar a chave privada, clique em Avançar. Eu também escolhi Export all extended properties (novamente, não tenho certeza se isso foi necessário). Eu escolhi usar uma senha simples (pass) e a criptografia padrão. Escolha uma pasta para exportar e nomeie o arquivo. Você sempre pode mover e renomear o arquivo, se necessário. Para simplificar, vamos copiá-lo para sua pasta conf sob sua instalação do Apache (no meu caso: C:\Apache\conf) e nomear o arquivo myCert (o arquivo resultante será um arquivo .pfx)

Etapa 3 - Converter o arquivo .pfx para uso com o Apache

A partir daqui eu basicamente segui o tutorial aqui , mas vou adicionar instruções aqui (ajustadas para nossas configurações) caso o site fique inativo.

Abra seu prompt de comando na pasta /Apache/conf/
Execute os seguintes comandos: Nota: assume que você tem openssl.exe na pasta bin na pasta raiz do Apache (isso deve ser padrão/padrão)

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

Isso solicitará uma senha, insira o que você inseriu na Etapa 2 ao exportar o arquivo .pfx. No meu caso, isso é pass. Eu digitei a mesma senha para a frase PEM e novamente para verificar. Isto irá criar um novo arquivo chamado privateKey.pem na sua pasta conf.

Então, execute

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

Novamente, você será solicitado a fornecer uma senha (Enter pass phrase for privateKey.pem:), use a senha que você definiu para privateKey.pem. (No meu caso, pass)
Você deve ver uma mensagem que diz writing RSA key e um novo arquivo chamado private.pem na sua pasta conf/. Este será seu SSLCertificateKeyFile.

Agora para gerar o Certificado do Servidor correspondente. Corra:

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

Isso solicitará uma senha, insira o que você inseriu na Etapa 2 ao exportar o arquivo .pfx. Digite-o e você terá agora um arquivo chamado EntrustCert.pem na sua pasta conf. Este é o seu SSLCertificateFile

Etapa 4 - Configurar httpd.conf

Use os novos arquivos criados como chave e certificado do seu servidor. Certifique-se de alterar a raiz do documento para onde seus arquivos estão!

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>

Também em httpd.conf:

  • Certifique-se de que LoadModule ssl_module modules/mod_ssl.so não tenha comentário (não # na frente)
  • Uncomment LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  • Uncomment LoadModule http2_module modules/mod_http2.so
  • Uncomment Include conf/extra/httpd-ssl.conf (NOTA: Assegure-se de que o arquivo esteja!)

Eu também tenho bibliotecas curl e open ssl incluídas:

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

Esses módulos não devem ser necessários, mas vou observar que eles estão ativados:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so

Etapa 5 - Config httpd-ssl.conf

Na pasta extra/ na pasta conf/ você verá um arquivo chamado httpd-ssl.conf.

5a. Altere o DocumentRoot - Altere o DocumentRoot do padrão para o diretório onde estão seus arquivos.

5b. Altere o ServerName - Altere o ServerName do padrão (algo como www.example.com:443) para localhost:443

5c. Altere o SSLCertificateFile
Altere o SSLCertificateFile do padrão (${SRVROOT}/conf/server.crt) para ${SRVROOT}/conf/EntrustCert.pem

5c. Altere o SSLCertificateKeyFile
Altere o SSLCertificateKeyFile do padrão (${SRVROOT}/conf/server.key) para ${SRVROOT}/conf/private.pem

Todos juntos, na tag <VirtualHost _default_:443>.

#   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"

Reinicie o Apache

Depois de fazer essas alterações, você poderá reiniciar o Apache e navegar para https: // localhost sem um aviso de segurança e um pequeno cadeado!

Secured localhost

Espero que isso ajude alguém! ????

Fontes:
1.) Resposta de Auri Rahimzadeh ao criar um certificado autoassinado
2.) Entrust Datacard - Como faço para converter um .pfx para ser usado com um servidor Apache?

0
StephanieQ

Outro método simples é usar o Python Server no Ubuntu.

  1. Gere server.xml com o seguinte comando no terminal:

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

    Nota: Supondo que você tenha openssl instalado.

  2. Salve abaixo o código em um arquivo chamado simple-https-server.py em qualquer diretório que você queira executar o servidor.

    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. Execute o servidor do terminal:

    python simple-https-server.py

  4. Visite a página em:

    https://localhost:4443

Notas extras: :

  1. Você pode alterar a porta no arquivo simple-https-server.py na linha

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

  2. Você pode alterar localhost para seu IP na mesma linha acima:

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

    e acessar a página em qualquer dispositivo conectado à sua rede. Isso é muito útil em casos como "você precisa testar a API GeoLocation HTML5 em um dispositivo móvel e o Chrome restringe a API somente em conexões seguras".

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

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

0
Asim K T