当前位置:   article > 正文

haproxy集成国密ssl功能[上]_haproxy配置国密证书

haproxy配置国密证书

1.1 缘起

   haproxy作为开源高性能http/tcp代理服务器得到了广泛应用,它可以支持国际ssl加密通信功能,但是对于国密ssl却一直没有被官方得到支持。随着国密标准规范的推广应用,以及等保2.0明确规定要求对网络通信中的报文或会话过程全文加密(三级),这样导致在haproxy在国内的很多业务场景中不符合等保要求而不能使用。因此有必要对haproxy进行国密ssl功能支持进行改造。
  铜锁/Tongsuo是由阿里巴巴基于openssl,衍生开发并开源的同时能够提供国际ssl和国密ssl的一个提供现代密码学算法和安全通信协议的开源基础密码库,为存储、网络、密钥管理、隐私计算等诸多业务场景提供底层的密码学基础能力,实现数据在传输、使用、存储等过程中的私密性、完整性和可认证性,为数据生命周期中的隐私和安全提供保护能力。
  本文描述了基于铜锁加密库,为haproxy添加国密ssl的加密传输能力的修改方法以及对应的测试环境搭建和测试方法。

2 环境搭建

2.1 测试环境准备

  为了支持测试国密测试,首先需要准备测试的客户端工具和web服务器。

  • 测试工具:支持国密ssl的curl
    国密curl下载链接
    直接下载linux版本的二进制文件,经测试在ubuntu 22.04中直接可以用。

  • 支持国密ssl的nginx web服务器
    国密nginx下载链接
    从以上地址下载源码后根据文档自行编译部署。
    最新版本的tengine需要修改一下configure:

./configure --prefix=/opt/nginx \
            --add-module=modules/ngx_tongsuo_ntls  \     
            --with-openssl=../Tongsuo  \           # 铜锁的源码目录
            --with-openssl-opt='enable-ntls' \
            --with-http_ssl_module \
            --with-stream \
            --with-stream_ssl_module \
            --with-stream_sni
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

  然后直接进行编译安装 make & make install
  复制国密nginx下载链接中的证书文件并保存到对应的文件中:

 CA.cert.pem
 SE.cert.pem
 SE.key.pem
 SS.cert.pem
 SS.key.pem
 test_ecc.crt
 test_ecc.key
 test_rsa.crt
 test_rsa.key
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  配置nginx.conf文件


	# http服务
    server {
        listen 80;
        server_name localhost;

        access_log /opt/nginx/logs/access.log main;

        ssi on;
        
        location / {

            index index.html;
            root /opt/nginx/html/;
        }
    }
    
	# 支持双证书的https服务
    server {
        listen 443 ssl;

        #开启国密功能
        enable_ntls     on; 

        #国际 RSA 证书
        ssl_certificate                 cert/test_rsa.crt;
        ssl_certificate_key             cert/test_rsa.key;

        #国际 ECC 证书(可选)
        ssl_certificate                 cert/test_ecc.crt;
        ssl_certificate_key             cert/test_ecc.key;

        #国密签名证书
        ssl_sign_certificate            cert/SS.cert.pem;
        ssl_sign_certificate_key        cert/SS.key.pem;

        #国密加密证书
        ssl_enc_certificate             cert/SE.cert.pem;
        ssl_enc_certificate_key         cert/SE.key.pem;

        #国密套件
        ssl_ciphers "ECC-SM2-SM4-CBC-SM3:ECC-SM2-SM4-GCM-SM3:ECDHE-SM2-SM4-CBC-SM3:ECDHE-SM2-SM4-GCM-SM3:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:ECDHE-RSA-AES128-SHA25    6:!aNULL:!eNULL:!RC4:!EXPORT:!DES:!3DES:!MD5:!DSS:!PKS";

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;

        default_type  text/plain;

        add_header  "Content-Type" "text/html;charset=utf-8";

        location / { 
            return 200 "tengine ntls test OK, ssl_protocol is $ssl_protocol (NTLSv1.1 表示国密,其他表示国际)";
        }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54

  如果国密握手成功,将显示:

tengine ntls test OK, ssl_protocol is NTLSv1.1 (NTLSv1.1 表示国密,其他表示国际)
  • 1

  否则显示:

tengine ntls test OK, ssl_protocol is TLSv1.3 (NTLSv1.1 表示国密,其他表示国际)
  • 1

2.2 测试

2.2.1 配置haproxy为ssl终结点,用http连接后端服务器

global

    log         /dev/log local2 warning

    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     65536
    user        haproxy
    group       haproxy
    nbproc      1
    #nbthread   10
    #daemon
    debug
    
    ssl-default-bind-ciphers ECC-SM2-SM4-CBC-SM3:ECC-SM2-SM4-GCM-SM3:ECDHE-SM2-SM4-CBC-SM3:ECDHE-SM2-SM4-GCM-SM3:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256,AES256-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!ADH:!MD5:!RC4
    ssl-default-bind-options prefer-client-ciphers no-sslv3 no-tlsv10 no-tls-tickets


#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
    mode                    http
    log                     global
    option                  httplog
    option                  dontlognull
    option                  redispatch
    retries                 3
    timeout queue           1m
    timeout connect         10s
    timeout client          1m
    timeout server          1m
    timeout check           10s
    maxconn                 3000
    
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#------------------------
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/987951
推荐阅读
相关标签
  

闽ICP备14008679号