我孤身走在路上, 石子在雾中发亮,夜很安静,荒原面对太空,星星互诉衷肠
Nginx配置防止证书泄露
Nginx配置防止证书泄露

Nginx配置防止证书泄露

我们在用nginx搭建站点后,有时你会使用CDN,不管是分担源站压力,还是隐藏自己的IP,亦或者提高速度增加用户体验,CDN都是很方便的, 而且也很便宜,但是有一种情况,我们既然做服务,大部分时候就不能禁止访问源,也就是说别人仍然可以使用IP+端口的形式扫描到我们,扫描后直接访问时可以拿到我们的证书的,这个时候他就知道这个域名的源站在这里。为了解决这个问题,我们需要在NGINX里增加一些配置,来实现一些效果。

大概原理

Nginx处理请求时,会根据请求的主机头(Host header)来匹配对应的server块。如果请求的主机头与某个server块的server_name指令匹配,那么Nginx就会使用这个server块来处理请求。如果没有任何server块的server_name与请求的主机头匹配,那么Nginx就会使用默认的server块来处理请求。

当直接通过IP地址访问服务器时,请求的主机头就是这个IP地址。因为IP地址不可能与您的域名匹配,所以Nginx会使用默认的server块来处理这样的请求。

在默认server块中,设置了return 404;,这就告诉Nginx对任何匹配这个server块的请求返回404错误。因此,当直接通过IP地址访问服务器时,Nginx就会返回404错误,而不是处理请求。

这就是为什么增加默认的server块可以防止别人直接通过IP地址访问服务器的原因。

下面是Nginx的配置代码:

可以在Nginx配置文件中设置一个默认的服务器块来处理直接通过IP访问的请求。当没有其他服务器块匹配请求时,Nginx会使用默认的服务器块。然后我们可以将默认的服务器块配置为返回404错误。以下是一个例子:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 404;
}

server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;
    return 404;
    ssl_certificate /etc/nginx/ssl/default.crt;
    ssl_certificate_key /etc/nginx/ssl/default.key;
}

在这个配置中,任何没有匹配其他服务器块的请求都将返回404错误。请注意,您需要为443端口的默认服务器提供一个SSL证书和密钥,否则Nginx将无法启动。您可以使用一个自签名的证书,因为这个证书不会被实际用于任何合法的请求。

另外还有一些小提示:Nginx配置文件中的server块的顺序通常不会影响其行为,因为Nginx会尝试匹配所有的server块。但是,对于直接通过IP访问的请求,Nginx会使用第一个匹配的server块,或者被标记为default_serverserver块。所以,将默认的server块放在配置文件的开头可以确保它被正确地用于处理直接通过IP访问的请求。

修改后记得用nginx -t检查一下配置文件是否有效,然后再重启一下,nginx -s reload

签名证书这块的话弄个自签名的证书就可以了,以下是在Linux系统中创建自签名SSL证书的步骤:

  1. 打开终端。
  2. 创建一个私钥。使用以下命令:
openssl genrsa -out server.key 2048

这将创建一个2048位的私钥并保存为server.key文件。

  1. 创建证书签名请求(CSR)。使用以下命令:
openssl req -new -key server.key -out server.csr

在执行此命令时,系统会提示输入一些信息,例如国家、州/省、城市、组织名称等。最重要的是”Common Name”,通常填写域名或者IP地址。

  1. 使用私钥对CSR进行签名以创建证书。使用以下命令:
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

这将创建一个有效期为365天的证书并保存为server.crt文件。

现在,您就有了自签名的SSL证书(server.crt)和相关的私钥(server.key)。这些可以在Nginx配置中使用。

域名的话随便写一个就行,还有需要注意的是自签名证书不应在生产环境中使用,因为它们不会被大多数浏览器信任。这只应用于测试或内部使用。在生产环境中,咱们应该使用由受信任的证书颁发机构(CA)签发的证书。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

26 − = 24