Pisando un gran pozo: trastorno de acceso al certificado HTTPS

1. Resolución de problemas y solución

Encontré tal problema hoy, el proceso del problema es el siguiente:

En el mismo servidor, nginx implementa múltiples proyectos y configura múltiples nombres de dominio. Los nombres de dominio de segundo nivel de los nombres de dominio (por ejemplo: baidu.com) son todos consistentes, y los certificados de los nombres de dominio de tercer nivel son todos SSL -Gratis solicitado en Alibaba Cloud.Certificado.

Durante la prueba, al acceder con la cabecera del protocolo HTTPS, el navegador indica que no hay certificado, lo cual no es seguro, al comprobar el certificado, en realidad se encuentra que es un certificado de otro nombre de dominio.

Por ejemplo: proyecto A aa.com y proyecto B bb.com, normalmente, https://aa.com usa el certificado de aa, y https://bb.com usa el certificado de bb.

¡pero! ! ! Hermanos, en realidad me encontré con la siguiente cosa extraña.

Si visita https://aa.com y usa el certificado de bb, informará un error de que el certificado no es seguro, y debe actualizarlo nuevamente para usar el certificado SSL de este nombre de dominio, y este problema es ¡100% reproducible!

Después de varias investigaciones, se sospecha que puede haber las siguientes tres razones, y he dado las soluciones correspondientes, solo espero que los hermanos dejen de intentar encontrar la verdad del problema.

Problema 1: error de carga del certificado

  • causas del problema:

Hay varios archivos de configuración en el directorio nginx/vhost/, a saber, aa.com.conf y bb.com.conf y ab.com.conf

Pero la secuencia de toma de control se lleva a cabo de acuerdo con la secuencia de carga de los archivos de configuración, de acuerdo con la clasificación normal del nombre de archivo, es decir, ab.com.conf tiene prioridad sobre bb.com.conf, por lo que causará confusión en el acceso al certificado SSL. .

  • Solución:

Dado que habrá un problema de confusión de carga de certificados en el mismo servidor, configure el nombre de dominio por separado, por ejemplo, coloque aa.com en otro servidor

Problema 2: Problema de contaminación de resolución de DNS

  • causas del problema:

La resolución de DNS está contaminada. Cuando visita aa.com por primera vez, la resolución de DNS apunta a bb.com, y solo puede acceder a ella después de actualizarla nuevamente.

  • Solución:

Encuentre la fuente de resolución de DNS y comuníquese para resolverlo. Generalmente, es posible que no pueda contactarlo. Vea mi solución inferior directamente.

Pregunta 3: problema de verificación del navegador

  • causas del problema:

Google o Firefox verificarán el certificado EV

  • Solución:

Use un certificado que no sea EV o use otro navegador, como el navegador perimetral de Microsoft

2. Solución definitiva

No importa cuál sea el problema anterior, hermanos, ya no necesitamos los certificados gratuitos de Alibaba Cloud, podemos usar certbot para generar certificados SSL

2.1 Se puede acceder al nombre de dominio desde la red externa

  • 1. Instale certbot y el complemento certbot de nginx (la instalación binaria no puede usar este método)
yum install certbot certbot-nginx -y
  • 2. Generar un certificado
certbot --nginx

Ingrese "certbot --nginx" → ingrese la dirección de correo electrónico que solicitó → seleccione A → seleccione Y → seleccione el nombre de dominio que se generará, si hay varios nombres de dominio, sepárelos con comas → seleccione 2, y un certificado SSL es Certificado SSL generado
Ubicación específica: en /ect/letsencrypt/live

  • 3. Configurar nginx

En el segundo paso anterior, escribimos directamente la configuración de nginx en el archivo de configuración existente, por lo que no es necesario volver a configurarlo.

  • 4. Actualización automática

Actualizar a las 3 am el 1 de cada mes

# crontab -e

0 3 1 * * certbot renew --force-renew

2.2 Solo la intranet puede acceder al nombre de dominio

Utilice el método de desafío de DNS

  • 1. Comience a solicitar un certificado
    Ejecute el siguiente comando para comenzar a solicitar un certificado y siga las indicaciones:
certbot certonly --manual --preferred-challenges dns -d example.com
  • 2. Agregar registro de análisis
    Cuando se ejecuta el comando, recibirá un mensaje similar al siguiente, solicitando agregar un registro de análisis TXT:
Please deploy a DNS TXT record under the name
_acme-challenge.example.com with the following value:

667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc

Once this is deployed,
Press ENTER to continue

De acuerdo con los consejos anteriores, inicie sesión en el backend del negocio en la nube (como Alibaba Cloud, Tencent Cloud, etc.), agregue un registro TXT llamado _acme-challenge.example.com y use 667drNmQL3vX6bu8YZlgy0wKNBlCny8yrjF1lSaUndc como valor de registro.

Precauciones:

    1. Dado que los registros DNS no surtirán efecto de inmediato, presione Intro más tarde.
    1. Use el comando dig +short -t txt _acme-challenge.example.com para verificar que el DNS esté funcionando.
  • 3. Configure
    el certificado generado por nginx certbot en el directorio /etc/letsencrypt/live/example.com/ y configure el archivo nginx de la siguiente manera

server{
    listen 443 ssl;
    server_name example.com;

    include /etc/nginx/conf.d/example.d/*;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
}
server{
    if ($host = example.com) {
        return 301 https://$host$request_uri;
    }

    server_name example.com;
    listen 80;
    return 404;
}

2.3 Configuración automática de intranet

  • 1. Guión de ubicación
git clone https://gitee.com/skyyemperor/certbot-letencrypt-wildcardcertificates-alydns-au /usr/local/certbot
cd /usr/local/certbot
chmod u+x ./au.sh

Modificar la configuración de la API del proveedor de la nube

vim au.sh
# TXY_KEY="AKIDC......."
# TXY_TOKEN="3pLabL...."

2. Solicitar un certificado

certbot certonly -d 'example.com' \
    --manual --preferred-challenges dns \
    --manual-auth-hook "/usr/local/certbot/au.sh python txy add" \
    --manual-cleanup-hook "/usr/local/certbot/au.sh python txy clean"

2.4 Resolución de errores

El certificado SSL gratuito de Let's Encrypt generalmente se registra, actualiza y administra automáticamente a través del servidor que usa Certbot, pero algunos sistemas de servidor no pueden instalar Certbot directamente a través del comando yum install certbot, y le indicarán que no hay paquete de certbot disponible.

  • centos6
wget https://dl.eff.org/certbot-auto
sudo mv certbot-auto /usr/local/bin/certbot-auto
sudo chown root /usr/local/bin/certbot-auto
sudo chmod 0755 /usr/local/bin/certbot-auto
  • centos7
rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

yum install certbot
  • ubuntu
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get update

apt-get install certbot
  • Debian
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get update

apt-get install certbot -t jessie-backports

Para obtener más información, consulte mi otro documento: Solicitud y uso del certificado SSL gratuito de Let's Encrypt para Nginx

Supongo que te gusta

Origin blog.csdn.net/cljdsc/article/details/129266552
Recomendado
Clasificación