Linux [Script 06] Reenvío HTTPS Instalación HTTP OpenSSL, Nginx (con-http_ssl_module) y generación de certificados digitales X.509 autofirmados (compartición de scripts de generación de implementación con un solo clic)

1. Descripción del proceso

Para habilitar la función SSL de Nginx, la versión de Windows viene con su propio http_ssl_modulemódulo y Linux necesita instalarlo. Para instalar este módulo, debe instalarlo primero openssl. Los pasos son los siguientes:

  1. Instalar OpenSSL,
  2. Vuelva a escribir y compilar Nginx para agregar el módulo http_ssl_module,
  3. Generar número de certificado,
  4. Nginx agrega configuración.

Entorno de instalación:

[root@tcloud ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)

2. Instale OpenSSL

La versión instalada esta vez es openssl-1.1.1s.tar.gz, el opensslInstall.shcontenido del script de instalación es el siguiente:

#!/bin/bash
echo "(1/4): 安装依赖 gcc zlib..."
yum -y install gcc zlib
echo "(1/4): 依赖 gcc zlib安装完毕"

echo "(2/4): 解压$1.tar.gz安装文件..."
tar -zxvf $1.tar.gz -C /usr/local
sleep 3
echo "(2/4): 安装文件解压完毕"

echo "(3/4): 检测OpenSSL安装环境..."
cd /usr/local/$1
./config shared zlib  --prefix=/usr/local/openssl
echo "(3/4): OpenSSL安装环境检测成功"

echo "(4/4): 编译安装OpenSSL..."
make && make install
echo "(4/4): OpenSSL编译安装完成"


cat <<'EOF' > /etc/profile.d/openssl.sh
export OPENSSL=/usr/local/openssl/bin
export PATH=$OPENSSL:$PATH:$HOME/bin
EOF
sleep 1
source /etc/profile.d/openssl.sh

Llamada de guión:

# 脚本参数为安装文件的版本信息 也就是解压后的文件夹
./opensslInstall.sh openssl-1.1.1s

Preste especial atención aquí: tar -zxvf $1.tar.gz -C /usr/local. Una vez completada la instalación real, los archivos OpenSSL se almacenan en /usr/local/openssl-1.1.1sla ruta. Esta carpeta se utilizará más adelante cuando Nginx instale http_ssl_module.

3.Nginx instala el módulo http_ssl

#!/bin/bash
echo "(1/4): 安装依赖pcre-devel..."
yum -y install pcre-devel
sleep 5
echo "(1/4): 依赖pcre-devel安装完毕"

echo "(2/4): 解压Nginx安装文件..."
tar -zxvf nginx-1.23.1.tar.gz
sleep 3
echo "(2/4): Nginx安装文件解压完毕"

echo "(3/4): 检测Nginx安装环境..."
cd nginx-1.23.1/
./configure --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.1s --prefix=/usr/local/nginx1.23.1
echo "(3/4): Nginx安装环境检测成功"

echo "(4/4): 编译安装Nginx..."
make & make install
echo "(4/4): Nginx编译安装完成"

Hay un gran --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.1sagujero --with-openssl=/usr/local/openssl-1.1.1sla carpeta de código fuente descomprimido de OpenSSL no es la carpeta después de la instalación, se debe prestar especial atención.

4. Generación de certificados autofirmados

4.1 Generación paso a paso

# 1.生成长度为1024的RSA密钥对并使用Triple DES算法进行加密
openssl genrsa -des3 -out test-en.key 1024
# 输入密码并验证密码【第2和第3步】都会用到这个密码
Enter pass phrase for test-en.key:
Verifying - Enter pass phrase for test-en.key:
# 2.创建新的证数签名
openssl req -new -key test-en.key -out test.csr
# 输入【第1步的密码】
Enter pass phrase for test-en.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
# 除 Common Name 外都可为空
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:HN
Locality Name (eg, city) [Default City]:ZZ
Organization Name (eg, company) [Default Company Ltd]:TEST
Organizational Unit Name (eg, section) []:DC
Common Name (eg, your name or your server's hostname) []:192.168.0.1
Email Address []:.

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:.
An optional company name []:.
# 3.去掉密码
openssl rsa -in test-en.key -out test.key
# 输入【第1步的密码】
Enter pass phrase for test-en.key:
writing RSA key
# 4.生成一个自签名的X.509数字证书 有效期365天
openssl x509 -req -days 365 -in test.csr -signkey test.key -out test.crt
# 成功标志
Signature ok
  • -x509: Especifica el comando para generar el certificado digital X.509.
  • -req: especifica que el archivo de entrada es una solicitud de firma de certificado.
  • -days 3650: Especifica que el certificado es válido por 365 días (aproximadamente 1 año).
  • -in test.csr: especifique el archivo de solicitud de firma del certificado de entrada como test.csr.
  • -signkey test.key: especifique el archivo de clave privada utilizado para firmar el certificado como test.key.
  • -out test.crt: especifique el nombre del archivo de certificado digital autofirmado generado como test.crt y guarde el certificado generado en este archivo.

Este comando genera un certificado digital X.509 autofirmado basado en el archivo de solicitud de firma de certificado test.csr y el archivo de clave privada test.key proporcionados, y guarda el certificado generado en el archivo test.crt. Un certificado autofirmado es un certificado firmado por el propio titular de la clave privada y no requiere certificación por parte de una autoridad certificadora (CA) de terceros.

El certificado autofirmado generado se puede utilizar para diversos fines, como pruebas, comunicación segura en entornos de desarrollo, sitios web internos, etc. Tenga en cuenta que los navegadores u otras aplicaciones en un entorno público pueden considerar que los certificados autofirmados no son de confianza porque no han sido certificados por una autoridad externa de confianza pública.

4.2 Generación automatizada

El contenido del script de generación automatizada certificateGenerate.shes el siguiente:

#!/bin/bash
echo "(1/5): 生成密钥对开始..."
openssl genrsa -des3 -out test-en.key -passout pass:test 1024
echo "(1/5): 生成密钥对结束。"

echo "(2/5): 创建新的证数签名开始..."
openssl req -new -key test-en.key -out test.csr -passin pass:test -subj "/C=CN/ST=HN/L=ZZ/O=TEST/CN=$1"
sleep 2
echo "(2/5): 创建新的证数签名结束。"

echo "(3/5): 密钥去除密码..."
openssl rsa -in test-en.key -out test.key -passin pass:test
echo "(3/5): 密钥去除密码成功。"

echo "(4/5): 生成自签名证数..."
openssl x509 -req -days 3650 -in test.csr -signkey test.key -out test.crt
echo "(4/5): 生成自签名证数成功。"

echo "(5/5): 删除过程文件..."
rm -rf test-en.key test.csr
echo "(5/5): 删除过程文件成功。"

Llamada de guión:

# 脚本参数为IP或域名
./certificateGenerate.sh tcloud

5.Configuración de Nginx

Elimine algunos comentarios aquí y mantenga solo la configuración principal y https://IP:18080envíe la solicitud a http://IP:8080lo siguiente:

http {
    
    
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
    
    
        listen       18080 ssl;
        server_name  localhost;

        ssl_certificate      /pathto/test.crt;
        ssl_certificate_key  /pathto/test.key;

        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;

        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
    
    
			proxy_pass http://localhost:8080/;
			proxy_redirect off;
			proxy_set_header Host $host:8080;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header   X-Real-IP $remote_addr;
			proxy_set_header Cookie $http_cookie;
        }
    }
}

6. Resumen

  1. Nginx en el entorno Windows viene con su propio módulo SSL, pero es difícil generar un certificado autofirmado en el entorno Windows, pero se puede generar y utilizar en el entorno Linux.
  2. Cuando Nginx instala el módulo SSL en un entorno Linux, debe compilarse utilizando el código fuente de OpenSSL. Esto debe tenerse en cuenta.

Supongo que te gusta

Origin blog.csdn.net/weixin_39168541/article/details/131320333
Recomendado
Clasificación