Respuestas:
Acabo de intentar esto: necesitaba probar un código de desarrollo en mi servidor local Apache en Windows . Esto fue MUCHO más difícil de lo que debería ser. Pero aquí están los pasos que lograron funcionar después de mucho trabajo ...
Descubrí que mi instalación de Apache viene con lo openssl.exe
que es útil. Si no tiene una copia, deberá descargarla. Mi copia estaba en la Apache2\bin
carpeta, que es como la menciono a continuación.
Pasos:
Apache2\conf
carpeta..\bin\openssl req -config openssl.cnf -new -out blarg.csr -keyout blarg.pem
Puede dejar todas las preguntas en blanco, excepto:
Cuando eso se complete, escriba
..\bin\openssl rsa -in blarg.pem -out blarg.key
Genere su certificado autofirmado escribiendo:
..\bin\openssl x509 -in blarg.csr -out blarg.cert -req -signkey blarg.key -days 365
Abra el conf\httpd.conf
archivo de Apache y asegúrese de que el módulo SSL esté habilitado; no debe haber hash al comienzo de esta línea:
LoadModule ssl_module modules/mod_ssl.so
Algunas instalaciones de Apache colocan la configuración SSL en un archivo separado. Si es así, asegúrese de que se incluya el archivo conf SSL. En mi caso tuve que descomentar esta línea:
Include conf/extra/httpd-ssl.conf
En la configuración SSL httpd-ssl.conf
tuve que actualizar las siguientes líneas:
SSLSessionCache "shmcb:C:\Program Files (x86)\Zend\Apache2/logs/ssl_scache(512000)"
SSLSessionCache "shmcb:C:/Progra\~2/Zend/Apache2/logs/ssl_scache(512000)"
DocumentRoot
- configura esto en la carpeta para tus archivos webServerName
- el nombre de host del servidorSSLCertificateFile "conf/blarg.cert"
SSLCertificateKeyFile "conf/blarg.key"
Reinicia Apache.
https://localhost/
en tu navegador.Espero que hayas llegado hasta aquí. Siéntase libre de actualizar esta publicación con cualquier otra información útil.
(Capturas de pantalla cortesía de Neil Obremski y su útil artículo , aunque ahora bastante desactualizadas).
Yo uso ngrok ( https://ngrok.com/ ) para esto. ngrok es una herramienta de línea de comando y crea un túnel para localhost. Crea conexiones http y https. Después de descargarlo, se debe ejecutar el siguiente comando:
ngrok http 80
(En la versión 2, la sintaxis es: ngrok http 80. En la versión 2, cualquier puerto puede ser tunelizado).
Después de unos segundos, dará dos URL:
http://a_hexadecimal_number.ngrok.com
https://a_hexadecimal_number.ngrok.com
Ahora, ambas URL apuntan al localhost.
aquí es la forma más sencilla de hacer esto
primero copie estos archivos server.crt y server.key (encontrar en el archivo adjunto) en su directorio apache / conf / ssl
luego abra el archivo httpd.conf y agregue la siguiente línea
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 la seguridad de la información que se envía desde y hacia su servidor web, es una buena idea habilitar el cifrado de la comunicación entre los clientes y el servidor. Esto a menudo se llama SSL .
Así que configuremos HTTPS con un certificado autofirmado en Apache2. Voy a enumerar los pasos que debes seguir:
sudo apt-get install apache2
sudo service apache2 status
Debería salir
Verifique que obtenga la página predeterminada para apache2 como esta.
openssl req -x509 -newkey rsa: 2048 -keyout mykey.key -out mycert.pem -days 365 -nodes
Por favor complete la información como se muestra a continuación.
mykey.key y mycert.pem deben crearse en su directorio de trabajo actual.
sudo cp mycert.pem / etc / ssl / certs
sudo cp mykey.key / etc / ssl / private
sudo a2enmod ssl
Debería salir así
sudo vi /etc/apache2/sites-available/default-ssl.conf
Busque estas dos líneas y reemplácelas con su certificado y rutas clave.
Inicial
Final
cd / etc / apache2 / sites-available /
sudo a2ensite default-ssl.conf
sudo service apache2 restart
Debería mostrar algo como esto con una advertencia de que la página que está a punto de ver no es segura porque hemos configurado el servidor con un certificado autofirmado.
default-ssl.conf
como está. Estaba a punto de cambiar el nombre mycert
de ssl-cert-snakeoil
, pero este archivo ya existe por lo que acabo de utilizar eso! Así que pude omitir de manera segura dos pasos en Debian.
Windows + Apache 2.4, por ejemplo:
descomente ssl_module en su httpd.conf
archivo.
LoadModule ssl_module modules/mod_ssl.so
escuche el puerto 443 al igual que el puerto 80 en su httpd.conf
archivo.
Listen 80
Listen 443
descomentar Incluir hosts virtuales en su httpd.conf
archivo.
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
agregue VirtualHost en su 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 el número de puerto 443
y las SSL......
líneas son diferentes de la configuración http normal.
guarde su archivo de configuración y reinicie el servicio apache. entonces puedes visitar https: // localhost /
El navegador web le advertirá que no es seguro la primera vez, simplemente elija continuar.
En realidad es bastante fácil, suponiendo que tenga una instalación de OpenSL a mano. (¿En qué plataforma estás?)
Asumiendo que está en Linux / Solaris / Mac OS / X, el Mini-CÓMO SSL / TLS de Apache de Van tiene un excelente tutorial que no reproduciré aquí.
Sin embargo, el resumen ejecutivo es que debe crear un certificado autofirmado. Como está ejecutando apache para localhost presumiblemente para desarrollo (es decir, no un servidor web público), sabrá que puede confiar en el certificado autofirmado y puede ignorar las advertencias que su navegador le lanzará.
Esto debería funcionar Ubuntu, Mint similar con Apache2
Es una buena guía, así que siguiendo esto
y dejando su ssl.conf así o similar
<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
puedes conseguirlo.
Espero que esta ayuda para linuxer
Es muy simple,
solo ejecuta los siguientes comandos
sudo a2enmod ssl
sudo service apache2 restart
sudo a2ensite default-ssl.conf
Eso es todo, ya terminaste.
Si desea forzar SSL (para usar https siempre), edite el archivo:
sudo nano /etc/apache2/sites-available/000-default.conf
y agrega esta línea
<VirtualHost *:80>
. . .
Redirect "/" "https://your_domain_or_IP/"
. . .
</VirtualHost>
luego reinicie nuevamente
sudo service apache2 restart
systemctl reload apache2
después sudo a2ensite default-ssl.conf
.
Estoy publicando esta respuesta ya que tuve problemas con esto y Chrome actualizó su seguridad al requerir Nombre alternativo del sujeto que muchas publicaciones no tienen, ya que no era necesario cuando se publicaron como respuesta. Supongo que WAMP ya está instalado.
PASO 1
Descargue OpenSSL Light e instálelo
PASO 2 (Opcional)
Aunque esta parte es opcional, facilita la ejecución posterior de comandos. Si omite este paso, tendrá que proporcionar la ruta completa a openssl.exe donde ejecutará el comando. Si prefiere configurarlo, actualice la ruta openssl.exe en Variables de entorno.
Variables de entorno -> Variables del sistema -> Ruta -> Editar -> Nuevo -> c: \ Archivos de programa \ OpenSSL-Win64 \ bin
PASO 3
Cree una carpeta llamada "clave" en el c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/
directorio.
Cree un archivo de configuración para su CA MyCompanyCA.cnf con contenido (puede cambiarlo según sus necesidades):
[ 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
Cree el archivo de configuración de extensiones MyCompanyLocalhost.ext para su certificado de servidor web:
subjectAltName = @alt_names
extendedKeyUsage = serverAuth
[alt_names]
DNS.1 = localhost
DNS.2 = mycy.mycompany.com
PASO 4
Ejecute estos comandos en el orden dado para generar la clave y los certificados:
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
Como resultado, tendrá los archivos MyCompanyCA.cer , MyCompanyLocalhost.cer y MyCompanyLocalhost.pvk .
PASO 5
Instale MyCompanyCA.cer debajo
Panel de control -> Administrar certificados de usuario -> Autoridades de certificación raíz de confianza -> Certificados
Para instalar MyCompanyLocalhost.cer simplemente haga doble clic en él.
PASO 6
Abra c:/wamp64/bin/apache/apache2.4.27(your version number)/conf/httpd.conf
y descomente (elimine el #) las siguientes 3 líneas:
LoadModule ssl_module modules/mod_ssl.so
Include conf/extra/httpd-ssl.conf
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
PASO 7
Abra c:/wamp64/bin/apache/apache2.4.37/conf/extra/httpd-ssl.conf
y cambie todos los parámetros a los que se muestran a continuación:
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: esta es la parte difícil. Si comete un pequeño error al editar este archivo, SSL no funcionará. Haga una copia antes de editarlo.
PASO 8
Reinicie Wamp y Chrome. Localhost ahora es seguro: https: // localhost
Este HowTo for CentOS fue fácil de seguir y solo tardó unos 5 minutos: https://wiki.centos.org/HowTos/Https
No detallaré cada paso aquí, pero los pasos principales son:
1.) Instale el módulo openssl para apache, si aún no está instalado
2.) Generar un certificado autofirmado
- En este punto, debería poder visitar https: // localhost éxito
3.) Configure un host virtual si es necesario
Esto funcionó en Windows 10 con Apache24:
1 - Agregue esto al final 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 - Agregue los archivos server.crt
y server.key
en elC:/Apache24/conf/ssl
carpeta. Vea otras respuestas en esta página para encontrar esos 2 archivos.
¡Eso es!
ssh -R youruniquesubdomain:80:localhost:3000 serveo.net
Y se puede acceder a su entorno local desde https://youruniquesubdomain.serveo.net
No podía creer cuando encontré este servicio. Ofrece todo y es el más fácil de usar. Si hubiera una herramienta tan fácil e indolora para cada problema ...
Ejecutando Apache en Windows 10 aquí. No pude hacer que Chrome confiara en el certificado hecho en la respuesta superior de Simon. Lo que terminé haciendo fue usar PowerShell para generar un certificado autofirmado.
En PowerShell
New-SelfSignedCertificate -DnsName "localhost" -CertStoreLocation "cert:\LocalMachine\My"
1
Escriba Certificate
en la barra de búsqueda de Windows, haga clic en elManage Computer Certificates
elemento del panel de control que se sugiere.
Desde el programa de gestión de certificados que aparece (certlm), ahora debería ver una localhost
clave debajo Personal >> Certificates
.
Copié este certificado en Trusted Root Certification Authorities
. Seré sincero porque no estoy seguro de si eso es necesario.
Al seleccionar el certificado recién copiado, haga doble clic en él (el certificado localhost). Desde el modal Certificado, haga clic en la Details
pestaña y luego enCopy to File...
botón.
Aparecerá el Asistente de exportación, elegí exportar la clave privada, haga clic en siguiente. También elegí hacerlo Export all extended properties
(nuevamente, no estoy seguro de si eso era necesario). Elegí usar una contraseña simple ( pass
) y el cifrado predeterminado. Elija una carpeta para exportar y asigne un nombre al archivo. Siempre puede mover y cambiar el nombre del archivo si es necesario. En aras de la simplicidad, copiemoslo en su carpeta conf bajo su instalación de Apache (en mi caso:) y nombremos C:\apache\conf
el archivo myCert
(el archivo resultante será un .pfx
archivo)
.pfx
archivo para usar con ApacheDesde aquí, básicamente seguí el tutorial aquí , pero agregaré instrucciones aquí (ajustadas para nuestra configuración) en caso de que ese sitio se caiga.
Abra su símbolo del sistema en la /apache/conf/
carpeta
Ejecute los siguientes comandos: Nota: Esto supone que tiene openssl.exe
en la bin
carpeta en la carpeta raíz de Apache (esto debería ser estándar / predeterminado)
..\bin\openssl pkcs12 -in myCert.pfx -nocerts -out privateKey.pem
Esto le pedirá una contraseña, ingrese lo que ingresó para el Paso 2 cuando exportó el .pfx
archivo. En mi caso, esto es pass
. Ingresé la misma contraseña para la frase PEM y nuevamente para verificar. Esto creará un nuevo archivo llamado privateKey.pem
en su carpeta conf.
Entonces corre
..\bin\openssl rsa -in privateKey.pem -out private.pem
Nuevamente se le pedirá una contraseña ( Enter pass phrase for privateKey.pem:
), use la contraseña que configuró privateKey.pem
. (En mi caso, pass
)
Debería ver un mensaje que dice writing RSA key
y un nuevo archivo llamado private.pem
en su conf/
carpeta. Este será su SSLCertificateKeyFile.
Ahora para generar el correspondiente certificado de servidor. Correr:
..\bin\openssl pkcs12 -in myCert.pfx -clcerts -nokeys -out EntrustCert.pem
Esto le pedirá una contraseña, ingrese lo que ingresó para el Paso 2 cuando exportó el .pfx
archivo. Ingrese y ahora tendrá un archivo llamado EntrustCert.pem
en su conf
carpeta. Este es su SSLCertificateFile
httpd.conf
Utilice los nuevos archivos creados como clave y certificado de su servidor. ¡Asegúrese de cambiar la raíz de su documento a donde están sus archivos!
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>
También en httpd.conf
:
LoadModule ssl_module modules/mod_ssl.so
esté comentado (no #
al frente)LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
LoadModule http2_module modules/mod_http2.so
Include conf/extra/httpd-ssl.conf
(NOTA: ¡Asegúrese de que es donde está el archivo!)También tengo incluidas las bibliotecas curl y open ssl:
# load curl and open ssl libraries
LoadFile "C:\php\libeay32.dll"
LoadFile "C:\php\ssleay32.dll"
LoadFile "C:\php\libssh2.dll"
Estos módulos no deberían ser necesarios, pero notaré que los tengo habilitados:
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
httpd-ssl.conf
En la extra/
carpeta en la conf/
carpeta debería ver un archivo llamadohttpd-ssl.conf
.
5a. Cambiar elDocumentRoot
: cambie el DocumentRoot
valor predeterminado al directorio donde se encuentran sus archivos.
5b. Cambiar elServerName
: cambia el ServerName
valor predeterminado (algo parecido www.example.com:443
) alocalhost:443
5c. Cambiar elSSLCertificateFile
Cambiar SSLCertificateFile
el valor predeterminado ( ${SRVROOT}/conf/server.crt
) a${SRVROOT}/conf/EntrustCert.pem
5c. Cambiar elSSLCertificateKeyFile
Cambiar SSLCertificateKeyFile
el valor predeterminado ( ${SRVROOT}/conf/server.key
) a${SRVROOT}/conf/private.pem
Todos juntos, en la <VirtualHost _default_:443>
etiqueta.
# 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"
¡Después de hacer estos cambios, debería poder reiniciar Apache y navegar a https: // localhost sin una advertencia de seguridad y un pequeño candado!
¡Espero que esto ayude a alguien! 😊
Fuentes:
1.) Respuesta de Auri Rahimzadeh sobre la creación de un certificado autofirmado
2.) Entrust Datacard - ¿Cómo convierto un .pfx para usarlo con un servidor Apache?
Otro método simple es usar Python Server en Ubuntu.
Genere server.xml con el siguiente comando en la terminal:
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
Nota: Suponiendo que tiene openssl instalado.
Guarde el siguiente código en un archivo con el nombre simple-https-server.py
en cualquier directorio en el que desee ejecutar el 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()
Ejecute el servidor desde la terminal:
python simple-https-server.py
Visita la página en:
https://localhost:4443
Notas extra :
Puedes cambiar el puerto en el simple-https-server.py
archivo en línea
httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
Puede cambiar localhost
su IP en la misma línea de arriba:
httpd = BaseHTTPServer.HTTPServer(('10.7.1.3', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler)
y acceda a la página en cualquier dispositivo conectado a su red. Esto es muy útil en casos como "tienes que probar la API de GeoLocation HTML5 en un dispositivo móvil y Chrome restringe la API solo en conexiones seguras".
Gist: https://gist.github.com/dergachev/7028596
http://www.piware.de/2011/01/creating-an-https-server-in-python/
Para aquellos que usan macOS, esta es una gran guía https://getgrav.org/blog/macos-sierra-apache-multiple-php-versions para configurar su entorno de desarrollo web local. En su tercera parte https://getgrav.org/blog/macos-sierra-apache-ssl Andy Miller explica cómo configurar apache con un certificado autofirmado:
Este es el comando de teclado:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt
Pero hay algunos pasos que debes seguir, así que échale un vistazo y ¡buena suerte! ;)
Me gustaría agregar algo a la muy buena respuesta de @CodeWarrior, que funciona perfectamente en Chrome, pero para Firefox necesita un paso adicional.
Como Firefox no aplica los certificados de CA que Windows hace de forma predeterminada, debe continuar about:config
, desplácese hacia abajo parasecurity.enterprise_roots.enabled
y cambiarlo a verdadero.
Ahora su certificado debería verse como válido también en Firefox.
Por supuesto, esto es solo para fines de desarrollo, ya que la confianza SSL es una preocupación de seguridad crítica y cambie esta configuración solo si conoce las implicaciones.
ssh -R youruniquesubdomain:80:localhost:3000 serveo.net
Ingrese su subdominio y número de puerto yhttps://youruniquesubdomain.serveo.net