【详解】NGINX配置HTTPS加密反向代理访问–自签CA

举报
皮牙子抓饭 发表于 2024/12/25 22:07:52 2024/12/25
【摘要】 NGINX配置HTTPS加密反向代理访问–自签CA引言随着互联网的发展,数据的安全性越来越受到人们的重视。HTTPS作为一种通过计算机网络进行安全通信的传输协议,它是在HTTP上建立的SSL/TLS加密层,并对传输的数据进行加密。本文将介绍如何使用自签名的CA(证书颁发机构)证书,在NGINX中配置HTTPS加密反向代理访问。一、生成自签名CA证书首先,我们需要使用OpenSSL生成自签名的...

NGINX配置HTTPS加密反向代理访问–自签CA

引言

随着互联网的发展,数据的安全性越来越受到人们的重视。HTTPS作为一种通过计算机网络进行安全通信的传输协议,它是在HTTP上建立的SSL/TLS加密层,并对传输的数据进行加密。本文将介绍如何使用自签名的CA(证书颁发机构)证书,在NGINX中配置HTTPS加密反向代理访问。

一、生成自签名CA证书

首先,我们需要使用OpenSSL生成自签名的CA证书。以下是生成证书的步骤:

  1. 生成服务器私钥
    打开终端,执行以下命令生成服务器的私钥:
openssl genrsa -out server.key 2048
  1. 生成证书签名请求(CSR)
    使用上一步生成的私钥来创建一个CSR文件:
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=YourState/L=YourCity/O=YourOrganization/OU=YourOrganizationalUnit/CN=YourDomainName"

请将上述命令中的​​YourState​​、​​YourCity​​、​​YourOrganization​​、​​YourOrganizationalUnit​​和​​YourDomainName​​替换为相应的信息。

  1. 自签名SSL证书
    使用私钥和CSR文件来生成自签名的SSL证书:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

这里我们设置了证书的有效期为3650天(约10年)。现在,我们已经有了​​server.key​​(私钥)和​​server.crt​​(证书)这两个文件,它们将用于NGINX的配置。

二、配置NGINX以使用HTTPS

接下来,我们需要在NGINX的配置文件中设置HTTPS。请按照以下步骤操作:

  1. 安装NGINX(如果尚未安装):
    对于Ubuntu系统:
sudo apt-get install nginx

对于CentOS系统:

sudo yum install nginx
  1. 配置NGINX
    打开NGINX的配置文件,通常位于​​​/etc/nginx/nginx.conf​​​,或者你可以在​​/etc/nginx/sites-available/​​目录下创建一个新的配置文件。以下是一个基本的HTTPS配置示例:
server {
    listen 443 ssl;
    server_name yourdomain.com; # 替换为你的域名

    ssl_certificate /path/to/server.crt; # 替换为你的证书路径
    ssl_certificate_key /path/to/server.key; # 替换为你的私钥路径

    location / {
        proxy_pass http://backend_server; # 替换为你的后端服务器地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

请确保将​​yourdomain.com​​​、​​/path/to/server.crt​​​、​​/path/to/server.key​​​和​​http://backend_server​​替换为实际的值。

  1. 测试并重新加载NGINX配置
    在修改配置文件后,使用以下命令测试配置是否正确:
nginx -t

如果测试通过,重新加载NGINX以使更改生效:

sudo service nginx reload # 对于使用systemd的系统
# 或者
sudo nginx -s reload # 对于不使用systemd的系统

三、处理浏览器警告

由于我们使用的是自签名证书,浏览器在首次访问时可能会显示安全警告。用户可以选择继续访问(通常是在高级设置中),或者可以将证书添加到浏览器的受信任证书存储中。请注意,自签名证书在生产环境中不推荐使用,因为它们不提供第三方验证,并可能导致用户信任问题。在生产环境中,建议使用由受信任的CA签发的证书。

结论

通过本文的步骤,你现在应该已经成功配置了NGINX以使用自签名的HTTPS加密反向代理访问。这可以增强你的网站安全性,确保数据传输过程中的机密性和完整性。然而,请记住,在生产环境中使用自签名证书可能会引发用户信任问题,因此最好使用由可靠CA签发的证书。配置NGINX作为HTTPS加密反向代理,并使用自签名CA证书,通常涉及以下步骤:

  1. 生成自签名CA证书和私钥
  2. 配置NGINX使用这些证书和私钥
  3. 设置反向代理规则

以下是一个具体的示例:

1. 生成自签名CA证书和私钥

你可以使用​​openssl​​​来生成自签名证书。以下命令将创建一个名为​​myca​​的CA,并为其生成一个私钥和一个自签名证书:

# 创建CA私钥
openssl genpkey -algorithm RSA -out myca.key -pkeyopt rsa_keygen_bits:2048

# 创建CA证书请求
openssl req -new -x509 -key myca.key -out myca.crt -days 3650 -subj "/CN=MyCA/O=MyOrg/C=MyCountry"

接下来,你可以使用这个CA来为你的服务器签发证书:

# 创建服务器私钥
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048

# 创建服务器证书请求
openssl req -new -key server.key -out server.csr -subj "/CN=localhost/O=MyOrg/C=MyCountry"

# 使用CA签发服务器证书
openssl x509 -req -in server.csr -CA myca.crt -CAkey myca.key -CAcreateserial -out server.crt -days 365

2. 配置NGINX使用这些证书和私钥

在你的NGINX配置文件中(例如​​/etc/nginx/nginx.conf​​​或​​/etc/nginx/conf.d/default.conf​​),你需要配置一个HTTPS服务器块来使用你刚刚生成的证书和私钥。以下是一个简单的示例:

server {
    listen 443 ssl;
    server_name localhost;  # 或者你的域名

    ssl_certificate /path/to/server.crt;  # 替换为你的服务器证书路径
    ssl_certificate_key /path/to/server.key;  # 替换为你的服务器私钥路径
    ssl_session_cache shared:SSL:1m;
    ssl_session_timeout  10m;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        proxy_pass http://backend_server;  # 替换为你的后端服务器地址
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

3. 设置反向代理规则

在上面的配置中,​​location /​​​块已经设置了反向代理规则。所有到达NGINX的HTTPS请求都会被转发到​​proxy_pass​​​指令指定的后端服务器。同时,​​proxy_set_header​​指令用于设置转发请求的头信息。

请确保将​​/path/to/server.crt​​​、​​/path/to/server.key​​​和​​http://backend_server​​替换为你自己的实际路径和后端服务器地址。另外,根据你的实际需求,你可能还需要调整其他SSL相关的配置选项。

完成以上步骤后,重新加载或重启NGINX服务,你的HTTPS加密反向代理就应该可以正常工作了。你可以使用​​nginx -t​​​来测试配置文件的语法是否正确,然后使用​​nginx -s reload​​来重新加载配置。当配置NGINX以使用HTTPS加密反向代理访问时,并且你决定使用自签名的CA(证书颁发机构)证书,你需要遵循一系列步骤来生成证书并配置NGINX。以下是一个详细的介绍:

一、生成自签名SSL证书

  1. 生成服务器私钥: 使用OpenSSL生成RSA私钥。例如,你可以运行以下命令:
openssl genrsa -des3 -out server.pass.key 2048

这里,​​2048​​ 是密钥长度。该命令会要求你输入一个密码来保护私钥。如果你不想在每次使用私钥时都输入密码,可以去除密码保护:

openssl rsa -in server.pass.key -out server.key
  1. 生成证书签名请求(CSR): CSR是向CA申请证书时提交的信息。使用以下命令生成CSR:
openssl req -new -key server.key -out server.csr

在生成过程中,你需要提供一些信息,如国家、组织、常用名(通常是你的域名或服务器IP地址)等。

  1. 自签名SSL证书: 既然你是自己充当CA,你将使用自己的私钥来签署证书。运行以下命令:
openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt

这里,​​-days 3650​​ 指定证书的有效期为3650天(约10年)。

二、配置NGINX以使用HTTPS和反向代理

  1. 安装NGINX(如果尚未安装): 根据你的操作系统,使用相应的包管理器安装NGINX。例如,在Ubuntu上,你可以运行:
sudo apt-get install nginx
  1. 配置NGINX: 打开NGINX的配置文件,通常位于​​/etc/nginx/nginx.conf​​​或​​/etc/nginx/conf.d/default.conf​​​。你需要为HTTPS配置一个新的​​server​​​块或在现有的​​server​​块中进行修改。以下是一个基本的配置示例:
server {
    listen 443 ssl;
    server_name yourdomain.com; # 替换为你的域名或服务器IP地址
    
    ssl_certificate /path/to/server.crt; # 替换为你的证书文件路径
    ssl_certificate_key /path/to/server.key; # 替换为你的私钥文件路径
    
    location / {
        proxy_pass http://backend_server; # 替换为你的后端服务器地址和端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
  1. 测试并重新加载NGINX配置: 在修改配置文件后,使用以下命令测试配置是否正确:
nginx -t

如果测试成功,重新加载NGINX以使更改生效:

sudo systemctl reload nginx # 或者根据你的操作系统使用相应的命令

三、注意事项和常见问题

  • 浏览器警告:由于你使用的是自签名证书,浏览器会发出安全警告,因为该证书不是由受信任的CA签发的。用户可以选择继续访问(通常是在高级设置中),但这不是最佳实践,特别是对于生产环境。
  • 证书有效期:虽然你可以为自签名证书设置任意长的有效期,但请记得定期更新证书以保持安全性。
  • 反向代理设置:确保​​proxy_pass​​指令指向正确的后端服务器地址和端口,并且后端服务器能够正确处理HTTPS请求(如果它也是通过HTTPS配置的)。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。