配置ARL资产侦察+Nginx双向证书认证

admin 2025年1月15日15:10:22评论52 views字数 4332阅读14分26秒阅读模式
 

起因

最近测绘任务较多,也存在固定资产的长久定位,所以想到了灯塔,但是,这玩意之前就报过漏洞,但是业务也只能开放在公网,所以做了一层Nginx的证书双向认证来保证VPS的安全。

1. 灯塔介绍与安装

1.1 灯塔介绍

ARL(Asset Reconnaissance Lighthouse)资产侦察灯塔系统旨在快速侦察与目标关联的互联网资产,构建基础资产信息库。 协助甲方安全团队或者渗透测试人员有效侦察和检索资产,发现存在的薄弱点和攻击面。

1.2 使用源码安装

自动化一建安装脚本

wget https://raw.githubusercontent.com/Aabyss-Team/ARL/master/misc/setup-arl.sh
chmod +x setup-arl.sh
./setup-arl.sh

如果选择的是源码安装,可以通过以下命令确认服务状态(如果全部运行正常那就没问题):

systemctl status mongod
systemctl status rabbitmq-server
systemctl status arl-web
systemctl status arl-worker
systemctl status arl-worker-github
systemctl status arl-scheduler
systemctl status nginx

源码安装后,请前往ARL-Web页面:https://IP:5003/,账号密码为随机生成,会打印在控制台.

2. Nginx证书双向认证

为什么要配置这个呢?像开源的站,如果放置在公网,免不了被别人盯上,对其攻击、扫描、爆破等。如果配置了证书双向认证的话,只有带有服务器可以认证的证书浏览器访问才可以访问到,其他的都只会返回错误页面。

2.1 什么是双向认证?

双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立HTTPS连接的过程中,握手的流程比单向认证多了几步。单向认证的过程,客户端从服务器端下载服务器端公钥证书进行验证,然后建立安全通信通道。双向通信流程,客户端除了需要从服务器端下载服务器的公钥证书进行验证外,还需要把客户端的公钥证书上传到服务器端给服务器端进行验证,等双方都认证通过了,才开始建立安全通信通道进行数据传输。

2.2 单项认证和双向认证的区别

2.2.1 单向认证流程

配置ARL资产侦察+Nginx双向证书认证
  1. 客户端发起建立HTTPS连接请求,将SSL协议版本的信息发送给服务器端;

  2. 服务器端将本机的公钥证书(server.crt)发送给客户端;

  3. 客户端读取公钥证书(server.crt),取出了服务端公钥;

  4. 客户端生成一个随机数(密钥R),用刚才得到的服务器公钥去加密这个随机数形成密文,发送给服务端;

  5. 服务端用自己的私钥(server.key)去解密这个密文,得到了密钥R

  6. 服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了。

2.2.2 单向认证流程双向认证流程

配置ARL资产侦察+Nginx双向证书认证
  1. 客户端发起建立HTTPS连接请求,将SSL协议版本的信息发送给服务端;
  2. 服务器端将本机的公钥证书(server.crt)发送给客户端;
  3. 客户端读取公钥证书(server.crt),取出了服务端公钥;
  4. 客户端将客户端公钥证书(client.crt)发送给服务器端;
  5. 服务器端使用根证书(root.crt)解密客户端公钥证书,拿到客户端公钥;
  6. 客户端发送自己支持的加密方案给服务器端;
  7. 服务器端根据自己和客户端的能力,选择一个双方都能接受的加密方案,使用客户端的公钥加密后发送给客户端;
  8. 客户端使用自己的私钥解密加密方案,生成一个随机数R,使用服务器公钥加密后传给服务器端;
  9. 服务端用自己的私钥去解密这个密文,得到了密钥R
  10. 服务端和客户端在后续通讯过程中就使用这个密钥R进行通信了。

2.3 证书准备

整个双向认证的流程需要六个证书文件:

  1. 根证书:root.crt
  2. 服务器端公钥证书:server.crt
  3. 服务器端私钥文件:server.key
  4. 客户端公钥证书:client.crt
  5. 客户端私钥文件:client.key
  6. 客户端集成证书(包括公钥和私钥,用于浏览器访问场景):client.p12

互联网使用一般向证书机构去申请签发,这是需要收费的。我们内部使用的话,可以自签证书。

3. Linux系统下生成证书

请确保server已经安装了Nginx

3.1.1 创建根证书私钥以及请求文件

  1. 首先创建根证书私钥以及请求文件:
mkdir /etc/nginx/keys/
cd /etc/nginx/keys/
openssl genrsa -out root.key 4096
openssl req -new -out root.csr -key root.key -subj "/C=CN/ST=BJ/L=test.com/O=test.com/OU=test.com/CN=192.168.1.1"
配置ARL资产侦察+Nginx双向证书认证

3.1.2 创建根证书(注意有效期):

openssl x509 -req -in root.csr -out root.crt -signkey root.key -CAcreateserial -days 3650
配置ARL资产侦察+Nginx双向证书认证

3.1.3 生成自签名服务器端证书

  1. 生成服务端证书私钥:
openssl genrsa -out server.key 4096
配置ARL资产侦察+Nginx双向证书认证

3.1.4 生成服务器证书请求文件:

openssl req -new -out server.csr -key server.key -subj "/C=CN/ST=BJ/L=test.com/O=test.com/OU=test.com/CN=192.168.1.1"
配置ARL资产侦察+Nginx双向证书认证

3.1.5 生成服务器公钥证书:

openssl x509 -req -in server.csr -out server.crt -signkey server.key -CA root.crt -CAkey root.key -CAcreateserial -days 3650
配置ARL资产侦察+Nginx双向证书认证

3.2生成自签名客户端证书

3.2.1 生成客户端证书密钥:

  1. 生成客户端的私钥与证书: client.key
openssl genrsa -out client.key 4096
配置ARL资产侦察+Nginx双向证书认证

3.2.2 生成 client 端数字证书请求

  1. 生成 client 端数字证书请求: client.csr
openssl req -new -key client.key -out client.csr
配置ARL资产侦察+Nginx双向证书认证

3.2.3 生成客户端证书请求文件:

openssl req -new -out client.csr -key client.key -subj "/C=CN/ST=BJ/L=test.com/O=test.com/OU=test.com/CN=192.168.1.1"
配置ARL资产侦察+Nginx双向证书认证

到这,我们所需要的证书就生成完毕了,接下来我们配置Nginx

3.2.4生成客户端 P12格式证书【浏览器安装证书】:

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

生成后下载到本地,安装到浏览器中

4. 配置nginx

创建nginx配置文件

cd /etc/nginx/sites-enabled
vim arl.conf

arl.conf如下:

server {
    listen 5003 ssl http2;

    ssl_certificate /etc/nginx/keys/server.crt;  # 配置证书位置
    ssl_certificate_key /etc/nginx/keys/server.key;  # 配置秘钥位置
    ssl_client_certificate /etc/nginx/keys/client.crt;  # 双向认证
    ssl_verify_client on;  # 双向认证

    ssl_session_timeout 5m;
    ssl_protocols TLSv1.2 TLSv1.3;  # 推荐使用 TLSv1.2 和 TLSv1.3
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;

    ssl_session_cache shared:MozSSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    ssl_dhparam /etc/ssl/certs/dhparam.pem;

# HSTS (ngx_http_headers_module is required) (63072000 seconds)
    add_header Strict-Transport-Security "max-age=63072000" always;

    access_log /var/log/nginx/arl.access.log  main;
    root    /opt/ARL/docker/frontend;

    location / {
        try_files $uri$uri/ /index.html;
        index  index.html index.htm;
    }

    location /api/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header   Host    $http_host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:5013/api/; 
    }

    location /swaggerui/ {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_pass http://127.0.0.1:5013/swaggerui/; 
    }

    error_page 497 https://$http_host;
}

注意:这里使用的是ip地址访问,如果使用域名访问,请修改 server_name 为域名地址

重载配置

nginx -s reload

5. 最终效果

在浏览器没有安装证书时,我们访问的结果为:

配置ARL资产侦察+Nginx双向证书认证

安装证书后访问:

配置ARL资产侦察+Nginx双向证书认证

点击确定,即可正常访问

配置ARL资产侦察+Nginx双向证书认证

功能也正常

配置ARL资产侦察+Nginx双向证书认证
 

原文始发于微信公众号(SecretTeam安全团队):配置ARL资产侦察+Nginx双向证书认证

 

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月15日15:10:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   配置ARL资产侦察+Nginx双向证书认证https://cn-sec.com/archives/3631810.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息