跳转至

使用国密网关代理 DCE 5.0

参照以下步骤为 DCE 5.0 配置国密网关。

软件介绍

Tengine: Tengine 是由淘宝网发起的 Web 服务器项目。它在 Nginx 的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。

Tongsuo: 铜锁/Tongsuo(原 BabaSSL)是一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。

准备工作

一台安装了 Docker 的 Linux 主机,并且确保它能访问互联网

编译和安装 Tengine & Tongsuo

注:此配置仅供参考

FROM docker.m.daocloud.io/debian:11.3

# Version
ENV TENGINE_VERSION="2.3.4" \
    TONGSUO_VERSION="8.3.2"

# Install required system packages and dependencies
RUN apt update && \
    apt -y install \
    wget \
    gcc \
    make \
    libpcre3 \
    libpcre3-dev \
    zlib1g-dev \
    perl \
    && apt clean

# Build tengine
RUN mkdir -p /tmp/pkg/cache/ && cd /tmp/pkg/cache/ \
    && wget https://github.com/alibaba/tengine/archive/refs/tags/${TENGINE_VERSION}.tar.gz -O tengine-${TENGINE_VERSION}.tar.gz \
    && tar zxvf tengine-${TENGINE_VERSION}.tar.gz \
    && wget https://github.com/Tongsuo-Project/Tongsuo/archive/refs/tags/${TONGSUO_VERSION}.tar.gz -O Tongsuo-${TONGSUO_VERSION}.tar.gz \
    && tar zxvf Tongsuo-${TONGSUO_VERSION}.tar.gz \
    && cd tengine-${TENGINE_VERSION} \
    && ./configure \
        --add-module=modules/ngx_openssl_ntls \
        --with-openssl=/tmp/pkg/cache/Tongsuo-${TONGSUO_VERSION} \
        --with-openssl-opt="--strict-warnings enable-ntls" \
        --with-http_ssl_module --with-stream \
        --with-stream_ssl_module --with-stream_sni \
    && make \
    && make install \
    && ln -s /usr/local/nginx/sbin/nginx /usr/sbin/ \
    && rm -rf /tmp/pkg/cache

EXPOSE 80 443
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]
docker build -t tengine:0.0.1 .

生成 SSL 证书(SM2 和 RSA 证书)

注:此证书仅适用于测试环境

您可以参考官方文档使用 Tongsuo 生成 SSL 证书,或者访问 https://www.gmssl.cn/gmssl/index.jsp?go=CA 申请。

SM2 证书

-rw-r--r-- 1 root root  749 Dec  8 02:59 sm2.*.io.enc.crt.pem
-rw-r--r-- 1 root root  258 Dec  8 02:59 sm2.*.io.enc.key.pem
-rw-r--r-- 1 root root  749 Dec  8 02:59 sm2.*.io.sig.crt.pem
-rw-r--r-- 1 root root  258 Dec  8 02:59 sm2.*.io.sig.key.pem

RSA 证书(可选)

-rw-r--r-- 1 root root  216 Dec  8 03:21 rsa.*.io
-rw-r--r-- 1 root root 4096 Dec  8 02:59 sm2.*.io

给 nginx 配置 SSL 证书

支持 SM2 和 RSA 两种证书。双证书的优点是:当浏览器不支持国密证书时,自动切换到 RSA 证书。

更多详细配置,请参考官方文档

# 进入 nginx 配置文件存放目录
cd /usr/local/nginx/conf

# 创建 cert 文件夹,用于存放 SSL 证书
mkdir cert

# 把 SM2、RSA(可选)证书拷贝到 `/usr/local/nginx/conf/cert` 目录下
cp sm2.*.enc.crt.pem sm2.*.io.enc.key.pem  sm2.*.sig.crt.pem  sm2.*.sig.key.pem /usr/local/nginx/conf/cert
cp rsa.*.crt.pem  rsa.*.key.pem /usr/local/nginx/conf/cert

# 编辑 nginx.conf 配置
vim nginx.conf
...
server {
  listen 443          ssl;
  proxy_http_version  1.1;
  # 开启国密功能
  enable_ntls         on;

  # 国际 RSA 证书(可选)
  ssl_certificate                 /usr/local/nginx/conf/cert/rsa.demo-dev.daocloud.io.crt.pem;
  ssl_certificate_key             /usr/local/nginx/conf/cert/rsa.demo-dev.daocloud.io.key.pem;

  # 国密签名证书
  ssl_sign_certificate            /usr/local/nginx/conf/cert/sm2.demo-dev.daocloud.io.sig.crt.pem;
  ssl_sign_certificate_key        /usr/local/nginx/conf/cert/sm2.demo-dev.daocloud.io.sig.key.pem;
  # 国密加密证书
  ssl_enc_certificate             /usr/local/nginx/conf/cert/sm2.demo-dev.daocloud.io.enc.crt.pem;
  ssl_enc_certificate_key         /usr/local/nginx/conf/cert/sm2.demo-dev.daocloud.io.enc.key.pem;
  ssl_protocols                   TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

  location / {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass https://istio-ingressgateway.istio-system.svc.cluster.local;
  }
}

重新加载 nginx,使其配置生效

nginx -s reload

下一步

国密网关部署成功之后,自定义 DCE 5.0 反向代理服务器地址

评论