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.
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:
Apache2\conf
..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
Você pode deixar todas as questões em branco, exceto:
Quando isso terminar, digite..\bin\openssl rsa -in blarg.pem -out blarg.key
Gere seu certificado autoassinado digitando:..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365
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
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
Na configuração SSL httpd-ssl.conf
eu tive que atualizar as seguintes linhas:
SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
DocumentRoot
- define isso para a pasta dos seus arquivos da webServerName
- o nome do host do servidorSSLCertificateFile "conf/blarg.cert"
SSLCertificateKeyFile "conf/blarg.key"
Reinicie o Apache.
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.)
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.
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>
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:
Sudo apt-get instala o Apache2
Serviço Sudo Apache2 status
Deve sair
Verifique se você obtém a página padrão do Apache2 dessa forma.
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.
mykey.key e mycert.pem devem ser criados no seu trabalho atual diretório.
Sudo cp mycert.pem/etc/ssl/certs
Sudo cp mykey.key/etc/ssl/private
Sudo a2enmod ssl
Deve sair assim
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
Final
cd/etc/Apache2/sites-disponíveis /
Sudo a2ensite default-ssl.conf
Serviço Sudo Apache2 restart
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.
Windows + Apache 2.4, por exemplo:
descomente o ssl_module no seu arquivo httpd.conf
.
LoadModule ssl_module modules/mod_ssl.so
escute a porta 443 como a porta 80 no seu arquivo httpd.conf
.
Listen 80
Listen 443
uncomment Incluir hosts virtuais no seu arquivo httpd.conf
.
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
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.
É 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ê.
Isso deve funcionar Ubuntu, Mint semelhante ao Apache2
É um guia de Nice, então seguindo este
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
É 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
ssh -R youruniquesubdomain:80:localhost:3000 serveo.net
E o seu ambiente local pode ser acessado de https://youruniquesubdomain.serveo.net
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 ...
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
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í!
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! ;)
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.
No PowerShell New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"
1
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
)
.pfx
para uso com o ApacheA 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
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
:
LoadModule ssl_module modules/mod_ssl.so
não tenha comentário (não #
na frente)LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule http2_module modules/mod_http2.so
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
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"
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!
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?
Outro método simples é usar o Python Server no Ubuntu.
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.
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()
Execute o servidor do terminal:
python simple-https-server.py
Visite a página em:
https://localhost:4443
Notas extras: :
Você pode alterar a porta no arquivo simple-https-server.py
na linha
httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
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/