Nginx / Haproxy implementa la solución de actualización OpenSSL + pasos de detección de seguridad de certificado

Código antifalsificación: nacido como un héroe, muerto como un fantasma.

1. Haproxy:

1 、 centos6.5 系统
[root @ yangwen ~] # cat / etc / redhat-release
CentOS versión 6.5 (Final)
[root @ yangwen ~] # uname -r
2.6.32-431.el6.x86_64
2 、 下载 并 编译安装 openssl
[root @ yangwen ~] # wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
[root @ yangwen ~] # tar zxf openssl-1.1.1.tar.gz
[ root @ yangwen ~] # cd openssl-1.1.1
[root @ yangwen openssl-1.1.1] # ./config --prefix = / usr / local /
[root @ yangwen openssl-1.1.1] # make && make install
[root @ yangwen openssl-1.1.1] # echo / usr / local / openssl / lib >> / etc / ld.so.conf
[root @ yangwen ~] # ln -sf /usr/local/lib64/libcrypto.so .1.1 /lib64/libcrypto.so.1.1
[root @ yangwen ~] # ln -sf /usr/local/lib64/libssl.so.1.1 /lib64/libssl.so.1.1
[root @ yangwen ~] # openssl versión
OpenSSL 1.1.1 11 de septiembre de 2018
descarga haprox y compila e instala (soporte openssl, puedes ir a este sitio web para descargar http://down.51cto.com/)

% M (S% 9K%) {A`R5KC4 $ RQV [1.png [root @ yangwen local] # ls haproxy-1.7.5.tar.gz
haproxy-1.7.5.tar.gz
[root @ yangwen local] # tar zxf haproxy-1.7.5.tar.gz
[root @ yangwen local] # cd haproxy-1.7.5
[root @ yangwen haproxy-1.7.5] # yum -y install pcre-devel zlib-devel
[root @ yangwen haproxy-1.7.5] # make TARGET = linux \
USE_ZLIB = 1 \
USE_PCRE = 1 \
USE_OPENSSL = 1 \
SSL_INC = / usr / local / include \
SSL_LIB = / usr / local / lib
[root @ yangwen haproxy-1.7.5] # make install
验证 : ldd / usr / local / sbin / haproxy | fgrep ssl 应该 输出 :
[root @ yangwen ~] # ldd / usr / local / sbin / haproxy | fgrep ssl
 libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f91364b8000) 

2. Artículos de Nginx

1. Prepare el sistema centos6.5
[root @ yangwen ~] # cat / etc / redhat-release
CentOS versión 6.5 (Final)
[root @ yangwen ~] # uname -r
2.6.32-431.el6.x86_64
2. Compile e instale nginx y soporta openssl

El guión es el siguiente:

#! / bin / bash 
wget -P / usr / local / src http://nginx.org/download/nginx-1.15.6.tar.gz 
wget -P / usr / local / src https: //www.openssl .org / source / openssl-1.1.1.tar.gz 
yum -y instalar epel-release 
yum -y instalar parche gcc gcc-c ++ readline-devel zlib-devel libffi-devel \ 
 openssl openssl-devel make autoconf automake libtool bison libxml2 \ 
 libxml2-devel libxslt-devel libyaml-devel python python-docutils \ 
 cmake imake expat-devel libaio libaio-devel bzr ncurses-devel wget \ 
 libjpeg libjpeg-devel libpng libpng-devel freetype freetype-develm curvel-pcrec \ 
 pcre libmcrypt-devel 
id nginx &> / dev / null 
if [$? -ne 0]; luego 
fi 
  groupadd -r nginx
  useradd -g nginx -r nginx 
--http-uwsgi-temp-path = / var / cache / nginx / uwsgi_temp \
cd / usr / local / src 
tar -xvf openssl-1.1.1.tar.gz 
tar -xvf nginx-1.15.6.tar.gz 
cd /usr/local/src/nginx-1.15.6 
./configure --prefix = / usr / local / nginx \ 
--sbin-path = / usr / sbin / nginx \ 
--conf-path = / etc / nginx / nginx.conf \ 
--error-log-path = / var / log / nginx /error.log \ 
--http-log-path = / var / log / nginx / access.log \ 
--pid-path = / var / run / nginx.pid \ 
--lock-path = / var / run / nginx.lock \ 
--http-client-body-temp-path = / var / cache / nginx / client_temp \ 
--http-proxy-temp-path = / var / cache / nginx / proxy_temp \ 
--http-fastcgi- temp-path = / var / cache / nginx / fastcgi_temp \ 
--user = nginx \ 
--group = nginx \
--http-scgi-temp-path = / var / cache / nginx / scgi_temp \ 
--with-http_ssl_module \ 
--with-http_realip_module \ 
--with-http_addition_module \ 
--with-http_sub_module \ 
--with-http_dav_module \ 
- -con-http_flv_module \ 
with-http_mp4_module \ 
with-http_gunzip_module \ 
with-http_gzip_static_module \ 
with-http_random_index_module \ 
with-http_secure_link_module \ 
with-http_stub_status_module \ 
with-http_auth_request_module \ 
--con -threads \ 
--with-stream \ 
--with-openssl = / usr / local / src / openssl-1.1.1 \ 
--with-stream_ssl_module \ 
--with-http_slice_module \ 
--with-mail \
--with-mail_ssl_module \  
--with-file-aio \ 
--with-http_v2_module \
--with-ipv6  
mkdir -pv / var / cache / nginx / {client_temp, proxy_temp, fastcgi_temp, uwsgi_temp, scgi_temp} 
make && make install

[root @ yangwen ~] # / usr / sbin / nginx
[root @ yangwen ~] # ps -ef | grep
raíz nginx 15935 1 0 20:38? 00:00:00 nginx: proceso maestro / usr / sbin / nginx
nginx 15936 15935 0 20:38? 00:00:00 nginx:
raíz del proceso de trabajo 15939 2510 0 20:38 pts / 1 00:00:00 grep nginx
[root @ yangwen ~] # netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* ESCUCHE 15935 / nginx        
[root @ yangwen ~] # curl -I 127.0.0.1
HTTP / 1.1 200 OK
Servidor: nginx / 1.11.7
Fecha: martes, 20 de noviembre 2018 12:38:58 GMT
Tipo de contenido: texto / html
Longitud del contenido: 612
Última modificación: martes, 20 de noviembre de 2018 12:38:07 GMT
Conexión: mantener vivo
ETag: "5bf4002f-264"
Accept-Ranges: bytes

[root @ yangwen ~] # nginx -V
nginx versión: nginx / 1.11.7
creado por gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
construido con OpenSSL 1.1.0e 16 de febrero de 2017
Soporte de TLS SNI habilitado
configurar argumentos: --prefix = / usr / local / nginx --sbin-path = / usr / sbin / nginx --conf-path = / etc / nginx / nginx.conf --error-log-path = / var / log / nginx / error.log --http-log-path = / var / log / nginx / access.log --pid-path = / var / run / nginx.pid --lock-path = / var / run / nginx.lock --http-client-body-temp-path = / var / cache / nginx / client_temp --http-proxy-temp-path = / var / cache / nginx / proxy_temp --http-fastcgi-temp-path = / var / cache / nginx / fastcgi_temp --http-uwsgi-temp-path = / var / cache / nginx / uwsgi_temp --http-scgi-temp-path = / var / cache / nginx / scgi_temp --user = nginx - group = nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_modugip_le-http_gunzip_modugip_le-http-gun_ip_module with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-openssl = / usr / local / src / openssl-1.1.0e --with- stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-ipv60e --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-ipv60e --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-ipv6

3 、 升级 openssl
[root @ yangwen ~] # wget https://www.openssl.org/source/openssl-1.1.1.tar.gz
[root @ yangwen ~] # tar zxf openssl-1.1.1.tar. gz
[root @ yangwen ~] # cd openssl-1.1.1
[root @ yangwen openssl-1.1.1] # mkdir -p / usr / local / ssl
[root @ yangwen openssl-1.1.1] # ./config - openssldir = / usr / local / ssl
[root @ yangwen openssl-1.1.1] # make -j $ (nproc) && make -j $ (nproc) install

[root @ yangwen openssl-1.1.1] # ln -sf /usr/local/lib64/libcrypto.so.1.1
/lib64/libcrypto.so.1.1 [root @ yangwen openssl-1.1.1] # ln -sf / usr /local/lib64/libssl.so.1.1 /lib64/libssl.so.1.1
[root @ yangwen openssl-1.1.1] # openssl versión
OpenSSL 1.1.1 11 de septiembre de 2018
4. Recompile e instale nginx
Tenga en cuenta la ruta de los parámetros secundarios: --with-openssl = / usr / local / src / openssl-1.1.1
[root @ yangwen ~] # / usr / sbin / nginx
[root @ yangwen ~] # ps -ef | grep nginx
root 37756 1 0 20: 57? 00:00:00 nginx: proceso maestro / usr / sbin / nginx
nginx 37757 37756 0 20:57? 00:00:00 nginx:
raíz del proceso de trabajo 37759 2510 0 20:58 pts / 1 00:00:00 grep nginx
[root @ yangwen ~] # netstat -anpt | grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* ESCUCHE 37756 / nginx        
[root @ yangwen ~] # curl -I 127.0.0.1
HTTP / 1.1 200 OK
Servidor: nginx / 1.15.6
Fecha: martes , 20 de noviembre de 2018 12 : 58: 20 GMT
Tipo de contenido: texto / html
Longitud del contenido: 612
Última modificación: martes, 20 de noviembre de 2018 12:38:07
Conexión GMT : keep-alive
ETag: "5bf4002f-264"
Rangos de aceptación: bytes

[root @ yangwen ~] # nginx -V
nginx versión: nginx / 1.15.6
creado por gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
construido con OpenSSL 1.1.1 11 de septiembre de 2018
Soporte de TLS SNI habilitado
configurar argumentos: --prefix = / usr / local / nginx --sbin-path = / usr / sbin / nginx --conf-path = / etc / nginx / nginx.conf --error-log-path = / var / log / nginx / error.log --http-log-path = / var / log / nginx / access.log --pid-path = / var / run / nginx.pid --lock-path = / var / run / nginx.lock --http-client-body-temp-path = / var / cache / nginx / client_temp --http-proxy-temp-path = / var / cache / nginx / proxy_temp --http-fastcgi-temp-path = / var / cache / nginx / fastcgi_temp --http-uwsgi-temp-path = / var / cache / nginx / uwsgi_temp --http-scgi-temp-path = / var / cache / nginx / scgi_temp --user = nginx - group = nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_modugip_le-http_gunzip_modugip_le-http-gun_ip_module with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-threads --with-stream --with-openssl = / usr / local / src / openssl-1.1.1 --with- stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-ipv61 --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-ipv61 --with-stream_ssl_module --with-http_slice_module --with-mail --with-mail_ssl_module --with-file-aio --with-http_v2_module --with-ipv6
Nota: la nueva versión de openssl se ha integrado en ella, por lo que ya no se mostrará ldd / usr / sbin / nginx | ​​grep ssl

Recomiendo el siguiente comando para operar de manera más segura:
./configure xxx
make -j $ (nproc)
mv / usr / sbin / nginx /usr/sbin/nginx.old
cp -prd objs / nginx / usr / sbin / nginx
nginx -s recargar

Tres, pruebas de seguridad de certificados

Recientemente, ha habido muchas vulnerabilidades en los certificados, aunque algunos de ellos quedan de la historia, pero en la operación y mantenimiento diarios, podemos tener una fuerte conciencia de seguridad y un conocimiento básico sólido, y podemos encontrar vulnerabilidades y rectificarlas lo antes posible para evitar que sucedan.
He resumido varias vulnerabilidades de los certificados. Espero que todos puedan intercambiar ideas para encontrar vacantes y llenar las vacantes (se recomienda que las vulnerabilidades de los certificados utilicen el navegador 360).

Primero, las vulnerabilidades del certificado en sí
1. El
 método para verificar que el certificado expiró es hacer clic en el pequeño candado verde en la esquina superior izquierda de la url de la página web (el rojo × indica una vulnerabilidad del certificado) -> haga clic en la información del certificado para ver el período de validez en la rutina. El período de validez es la fecha de vencimiento del certificado antes de hoy.

9CJU6_4_I8 ~ VS21TE0DHKM0.png

2 @ XT''M ~ $ F365] QW824OYF1.png

2. El certificado del servidor no coincide con
   el sitio web, es decir, el certificado aplicado no es aplicable a este sitio web. Por ejemplo, el sitio web es oos-nm-iam.ctyunapi.cn, pero el certificado se emite a * .oos-nm.ctyunapi.cn.

Y6K20 {P6D} 962A% [0IK {5E3.png

3. La cadena de certificados está incompleta.
   El certificado generalmente se compone de certificado raíz + certificado intermedio (a veces sin certificado intermedio) + certificado SSL de sitio web.
   La cadena de certificados incompleta afecta principalmente al navegador de Android, habrá un mensaje en el teléfono con Android, pero el navegador de la PC generalmente es normal y hay dos formas de detectarlo.
A. La herramienta de línea de comando Linux openssl verifica, por
   ejemplo, ver la URL del grupo de recursos de Mongolia Interior api
   openssl s_client -connect oos-nm.ctyunapi.cn:443
   encontró que hay dos cadenas, si es una, es un rendimiento incompleto

LS4B {VAA) N6 ~ LFDC_JIK9GF.png

 B. Mediante una consulta especial del sitio web, recomiendo el sitio web en línea https://myssl.com/, ingrese la dirección del sitio web, si la cadena de certificados no está completa, se reflejará en el informe de prueba.

1OD] ET} ES1QSIS ~ UJMA77LO.png 

KZEFM @ XM_ @ 9X} IRL67WU) A8.png

4. La autoridad emisora ​​del certificado no es legal. Por ejemplo, Google y Mozilla ya no confían en el certificado emitido por Wotong el 21 de octubre de 2016. El certificado aquí se refiere a que el certificado raíz es ilegal. Tome el certificado 360 como ejemplo:

F14PMUE {N1E) 7AWF6 $ [@ MKO.png

1: Certificado raíz, este no puede ser el certificado Wotong
2: Este es el certificado Wotong, esto no es un problema, porque este es el certificado del intermediario, no la autoridad de certificación
3: certificado del servidor.

C5% JI ~} IQ [3A]] SE22FV $ HG.png

En segundo lugar, el protocolo de cifrado del certificado y el protocolo de cifrado de la suite de
     cifrado:
     https en realidad se compone de dos partes: http + SSL / TLS, que es agregar una capa de módulos de procesamiento para la información cifrada en http. TLS cifra la transmisión de información tanto en el servidor como en el cliente, por lo que los datos transmitidos son datos cifrados.
     En la actualidad, los protocolos sslv3 y sslv2 se han descifrado y ya no se recomiendan, por lo que se recomienda utilizar el protocolo TLS más seguro, que generalmente es tlsv1.2.
     Conjunto de cifrado:
     cuando ingresa la URL que comienza con https en la barra de direcciones del navegador, se producirá una gran cantidad de comunicación entre el navegador y el servidor en los próximos cientos de milisegundos. El primer paso en estos pasos complejos es negociar un algoritmo clave que se utilizará en las comunicaciones posteriores entre el navegador y el servidor. El proceso es simplemente el siguiente: el
navegador envía una serie de Cipher Suite (conjunto de algoritmos clave, en lo sucesivo Cipher) [C1, C2, C3, ...]
que admite al servidor; el servidor recibe todos los navegadores Después de Cipher, compárelo con la suite que admite. Si encuentra un Cipher compatible con ambas partes, informe al navegador; el
navegador y el servidor usan el Cipher correspondiente para la comunicación posterior. Si el servidor no encuentra un algoritmo de coincidencia, el navegador (tomando Firefox 30 como ejemplo, los navegadores utilizados en ejemplos posteriores son todos de esta versión de Firefox) emitirá un mensaje de error.

     RC4, DH, etc. no son compatibles con los conjuntos de cifrado actualmente compatibles, por lo que estos protocolos generalmente se eliminan del conjunto de cifrado.
     Actualmente, los protocolos y suites de cifrado configurados en varios servidores web son diferentes. Los protocolos y suites de cifrado configurados en haproxy son los siguientes:

KBLAMFKNWDBB] GH} 0NG) {MS.png

ssl-default-bind-options Establezca el protocolo ssl para
prohibir generalmente que sslv3 no-sslv3
use tlsv1.2 force-tlsv12
ssl-default-bind-ciphers Configure el conjunto de cifrado
en
ECDHE-RSA-AES128-GCM-SHA256: ECDHE: ECDH : AES: ALTO:! NULL :! ANULL :! MD5 :! ADH :! RC4 :! DH :! DHE 

Supongo que te gusta

Origin blog.51cto.com/yw666/2486637
Recomendado
Clasificación