<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>SSL on Kernel Notes</title><link>https://my-blog.j8465383071.workers.dev/tags/ssl/</link><description>Recent content in SSL on Kernel Notes</description><generator>Hugo -- 0.147.7</generator><language>zh-cn</language><lastBuildDate>Fri, 14 Aug 2026 17:47:31 +0800</lastBuildDate><atom:link href="https://my-blog.j8465383071.workers.dev/tags/ssl/index.xml" rel="self" type="application/rss+xml"/><item><title>Vastbase SSL安全传输</title><link>https://my-blog.j8465383071.workers.dev/posts/database/vastbase-ssl/</link><pubDate>Thu, 28 Aug 2025 09:47:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/database/vastbase-ssl/</guid><description>&lt;h1 id="1-基于ssl证书实现身份认证">1 基于SSL证书实现身份认证&lt;/h1>
&lt;p>在应用与数据库传输数据时，为避免攻击者对数据进行窃听、篡改、伪造、重放等攻击，Vastbae支持采用SSL协议保障数据机密性与完整性。在SSL协议协商密钥的过程中，应用与数据库需通过证书验证对方身份，同时，该证书也可作为登入数据库的身份凭证。&lt;br>
此处介绍生成证书，并基于证书配置SSL协议，同时基于证书实现身份认证，操作流程可分为以下3个阶段：&lt;/p>
&lt;ul>
&lt;li>一、生成私钥与证书&lt;/li>
&lt;li>二、数据库端配置证书与私钥&lt;/li>
&lt;li>三、应用端配置证书与私钥&lt;/li>
&lt;/ul>
&lt;h2 id="一生成私钥与证书">一、生成私钥与证书&lt;/h2>
&lt;p>此处介绍基于openssl工具，生成自签名证书的流程&lt;/p>
&lt;ol>
&lt;li>
&lt;p>创建存放私钥与证书的文件夹&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir cadir
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> cadir
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir ./demoCA ./demoCA/newcerts ./demoCA/private
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;01&amp;#39;&lt;/span>&amp;gt;./demoCA/serial
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch ./demoCA/index.txt
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>配置openssl工具&lt;br>
从Vastbase安装包中，获取openssl工具以及openss配置文件。假设Vastbae安装包存放在$GAUSSHOME目录。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">cp &lt;span class="nv">$GAUSSHOME&lt;/span>/bin/openssl ./
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">PATH&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="nb">pwd&lt;/span>&lt;span class="sb">`&lt;/span>:&lt;span class="nv">$PATH&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">which openssl &lt;span class="c1"># 确保openssl来源于Vastbase安装包，避免因版本不同造成证书不可用&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl version
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp &lt;span class="nv">$GAUSSHOME&lt;/span>/share/sslcert/gsql/openssl.cnf ./
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">OPENSSL_CONF&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="nb">pwd&lt;/span>&lt;span class="sb">`&lt;/span>/openssl.cnf
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>创建CA私钥、CA证书&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">openssl ecparam -genkey -name SM2 -out demoCA/private/cakey.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -new -config openssl.cnf -key demoCA/private/cakey.pem -subj /C&lt;span class="o">=&lt;/span>CN/ST&lt;span class="o">=&lt;/span>BJ/L&lt;span class="o">=&lt;/span>HaiDian/O&lt;span class="o">=&lt;/span>VAST/OU&lt;span class="o">=&lt;/span>SEC/CN&lt;span class="o">=&lt;/span>CA -out cacert.req
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ca -selfsign -config openssl.cnf -batch -keyfile demoCA/private/cakey.pem -in cacert.req -out demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>创建数据库私钥、数据库证书&lt;/p></description></item><item><title>数据库安全 传输加密</title><link>https://my-blog.j8465383071.workers.dev/posts/security/transport-encryption/</link><pubDate>Wed, 21 May 2025 09:37:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/security/transport-encryption/</guid><description>&lt;h1 id="非国密">非国密&lt;/h1>
&lt;ol>
&lt;li>生成证书&lt;/li>
&lt;li>数据库服务端：配置证书、配置传输加密算法&lt;/li>
&lt;li>数据库客户端：配置证书&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 检查openssl版本&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">which openssl
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># 确保使用的是vastbase发布包中的openssl，而非操作系统中的openssl&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp &lt;span class="nv">$GAUSSHOME&lt;/span>/share/sslcert/gsql/openssl.cnf ./
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">OPENSSL_CONF&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="nb">pwd&lt;/span>&lt;span class="sb">`&lt;/span>/openssl.cnf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 创建文件&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir cert
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> cert
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir ./demoCA ./demoCA/newcerts ./demoCA/private
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">700&lt;/span> ./demoCA/private
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;01&amp;#39;&lt;/span>&amp;gt;./demoCA/serial
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch ./demoCA/index.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ca&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl genrsa -out ./demoCA/private/cakey.pem &lt;span class="m">2048&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -new -key ./demoCA/private/cakey.pem -out ./demoCA/private/ca_cert_req.pem -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=root&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -in ./demoCA/private/ca_cert_req.pem -days &lt;span class="m">7300&lt;/span> -signkey ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># server&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl genrsa -out server.key &lt;span class="m">2048&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -new -key server.key -out server.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=server&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -in server.csr -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -CAcreateserial -out server.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># client&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl genrsa -out client.key &lt;span class="m">2048&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -new -key client.key -out client.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=client&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -in client.csr -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -CAcreateserial -out client.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 查看内容&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -in client.crt -text
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置权限&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">600&lt;/span> client.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">600&lt;/span> client.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">600&lt;/span> server.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">600&lt;/span> server.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">600&lt;/span> ./demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CERT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="nb">pwd&lt;/span>&lt;span class="sb">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export CERT=`pwd`
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLMODE=verify-ca
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLROOTCERT=$CERT/demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLKEY=$CERT/client.key
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLCERT=$CERT/client.crt
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">&amp;#39;&lt;/span> &amp;gt; client_env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> client_env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置服务端参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data -c &lt;span class="s2">&amp;#34;ssl=on&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data -c &lt;span class="s2">&amp;#34;ssl_ciphers = &amp;#39;ALL&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data -c &lt;span class="s2">&amp;#34;ssl_ca_file = &amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/demoCA/cacert.pem&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data -c &lt;span class="s2">&amp;#34;ssl_key_file=&amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/server.key&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data -c &lt;span class="s2">&amp;#34;ssl_cert_file=&amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/server.crt&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重启数据库&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vsql -d postgres -c &lt;span class="s2">&amp;#34; CREATE USER u1 PASSWORD &amp;#39;u1.password&amp;#39; &amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 连接数据库：需加-h参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">vsql -h localhost -d postgres -U u1 -W &lt;span class="s1">&amp;#39;u1.password&amp;#39;&lt;/span> -r
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">rm -f client.* server.*
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data -c &lt;span class="s2">&amp;#34;ssl_ciphers = &amp;#39;ECDHE-ECDSA-SM4-CBC-SM3&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out ./demoCA/private/cakey.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -new -key ./demoCA/private/cakey.pem -out ./demoCA/private/ca_cert_req.pem -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=root&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -in ./demoCA/private/ca_cert_req.pem -days &lt;span class="m">7300&lt;/span> -signkey ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># server&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out server.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -new -key server.key -out server.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=server&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -in server.csr -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -CAcreateserial -out server.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># client&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out client.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -new -key client.key -out client.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=client&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -in client.csr -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -CAcreateserial -out client.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">600&lt;/span> client.key client.crt server.key server.crt ./demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -in client.crt -text
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h1 id="国密">国密&lt;/h1>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">mkdir cert
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">cd&lt;/span> cert
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl version
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># OpenSSL 1.1.1s Tassl 2.1.2 1 Nov 2022&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">cp ../tassl/install/openssl.cnf ./
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod +w ./openssl.cnf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">[ gm_ca_cert ]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">subjectKeyIdentifier=hash
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">authorityKeyIdentifier=keyid:always,issuer
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">basicConstraints = critical,CA:true
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">keyUsage = critical, cRLSign, keyCertSign
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">[ gm_sign_cert ]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">basicConstraints = CA:FALSE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">keyUsage = critical, digitalSignature, nonRepudiation
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">[ gm_enc_cert ]
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">basicConstraints = CA:FALSE
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">keyUsage = critical, keyEncipherment, dataEncipherment, keyAgreement&amp;#39;&lt;/span> &amp;gt;&amp;gt; ./openssl.cnf
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">mkdir ./demoCA ./demoCA/newcerts ./demoCA/private
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">chmod &lt;span class="m">700&lt;/span> ./demoCA/private
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;01&amp;#39;&lt;/span>&amp;gt;./demoCA/serial
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">touch ./demoCA/index.txt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># ca&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out ./demoCA/private/cakey.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -config openssl.cnf -new -key ./demoCA/private/cakey.pem -sm3 -out ./demoCA/private/ca_cert_req.pem -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=root&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -extfile openssl.cnf -extensions gm_ca_cert -in ./demoCA/private/ca_cert_req.pem -sm3 -days &lt;span class="m">7300&lt;/span> -signkey ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># server&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out server.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ec -in server.key -passout pass:gauss@123 -sm4 -out server.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -config openssl.cnf -new -key server.key -passin pass:gauss@123 -sm3 -out server.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=server&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -extfile openssl.cnf -extensions gm_sign_cert -in server.csr -sm3 -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -passin pass:gauss@123 -CAcreateserial -out server.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># server.enc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out server_enc.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ec -in server_enc.key -passout pass:gauss@123 -sm4 -out server_enc.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -config openssl.cnf -new -key server_enc.key -passin pass:gauss@123 -sm3 -out server_enc.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=server&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -extfile openssl.cnf -extensions gm_enc_cert -in server_enc.csr -sm3 -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -passin pass:gauss@123 -CAcreateserial -out server_enc.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc encrypt -M server -D ./ -K gauss@123
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># client&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out client.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ec -in client.key -passout pass:gauss@123 -sm4 -out client.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -config openssl.cnf -new -key client.key -passin pass:gauss@123 -sm3 -out client.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=client&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -extfile openssl.cnf -extensions gm_sign_cert -in client.csr -sm3 -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -passin pass:gauss@123 -CAcreateserial -out client.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># client.enc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ecparam -name SM2 -genkey -out client_enc.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl ec -in client_enc.key -passout pass:gauss@123 -sm4 -out client_enc.key
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl req -config openssl.cnf -new -key client_enc.key -passin pass:gauss@123 -sm3 -out client_enc.csr -subj &lt;span class="s2">&amp;#34;/C=CN/ST=Beijing/O=huawei/OU=gauss/CN=client&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">openssl x509 -req -extfile openssl.cnf -extensions gm_enc_cert -in client_enc.csr -sm3 -days &lt;span class="m">3650&lt;/span> -CA ./demoCA/cacert.pem -CAkey ./demoCA/private/cakey.pem -passin pass:gauss@123 -CAcreateserial -out client_enc.crt
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc encrypt -M client -D ./ -K gauss@123
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># openssl x509 -in client.crt -text&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">CERT&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="sb">`&lt;/span>&lt;span class="nb">pwd&lt;/span>&lt;span class="sb">`&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="s1">&amp;#39;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export CERT=`pwd`
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLMODE=verify-ca
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLTLCP=1
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLROOTCERT=$CERT/demoCA/cacert.pem
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLKEY=$CERT/client.key
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLCERT=$CERT/client.crt
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLENCKEY=$CERT/client_enc.key
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">export PGSSLENCCERT=$CERT/client_enc.crt
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s1">&amp;#39;&lt;/span> &amp;gt; client_env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">source&lt;/span> client_env
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 设置服务端参数&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl=on&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl_ciphers = &amp;#39;ALL&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl_use_tlcp=on&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl_ca_file = &amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/demoCA/cacert.pem&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl_key_file=&amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/server.key&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl_cert_file=&amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/server.crt&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl_enc_key_file=&amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/server_enc.key&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">gs_guc &lt;span class="nb">set&lt;/span> -D &lt;span class="nv">$GAUSSHOME&lt;/span>/data/single_node -c &lt;span class="s2">&amp;#34;ssl_enc_cert_file=&amp;#39;&lt;/span>&lt;span class="nv">$CERT&lt;/span>&lt;span class="s2">/server_enc.crt&amp;#39;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 重启数据库&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item><item><title>海量 10 设计 SSL协议</title><link>https://my-blog.j8465383071.workers.dev/posts/projectdocs/10-design-ssl/</link><pubDate>Tue, 09 Sep 2025 18:48:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/projectdocs/10-design-ssl/</guid><description>&lt;h1 id="1-tls协议支持第三方流量审计">1 TLS协议支持第三方流量审计&lt;/h1>
&lt;h2 id="11-功能简述">1.1 功能简述&lt;/h2>
&lt;p>【需求背景】&lt;br>
TLS协议，是保障通信安全的加密协议，可分为4个子功能：&lt;/p>
&lt;ol>
&lt;li>密钥生成：通过密钥交换或密钥协商等协议，让双方生成相同的密钥&lt;/li>
&lt;li>身份认证：在开始阶段，双方均向对方发送自己的证书。双方接收证书后，基于PKI体系，校验证书是否合法。&lt;/li>
&lt;li>数据加密：发送方发生数据前，使用密钥加密数据，发送数据密文。接受方接受密文后，使用密钥解密，获取数据。&lt;/li>
&lt;li>数据校验：在加密数据的同时，生成数据完整性校验码，与数据密文拼接在一起。（简单理解：生成数据的哈希值，并使用密钥加密哈希值）接收方解密数据后，同样生成数据完整性校验码，与接收的相比，判断是否一致。&lt;/li>
&lt;/ol>
&lt;p>开源软件libssl.so提供TLS功能，应用只需调用接口，即可实现TLS协议。同时，libssl.so提供100+算法套件，可让应用选择不同的参数组合，1个算法套件，包含4个关键参数：&lt;/p>
&lt;ol>
&lt;li>密钥生成：密钥生成协议&lt;/li>
&lt;li>身份认证：证书算法类型&lt;/li>
&lt;li>数据加密：加密算法类型&lt;/li>
&lt;li>数据校验：哈希算法类型&lt;/li>
&lt;/ol>
&lt;p>例如，libssl.so中，常用的算法套件为：ECDHE-RSA-AES128-SHA256，该套件中，参数的含义如下：&lt;/p>
&lt;ol>
&lt;li>密钥生成协议：ECDHE协议。（常见协议类型:DHE、ECDHE、RSA等）&lt;/li>
&lt;li>证书算法类型：RSA&lt;/li>
&lt;li>加密算法类型：AES-128&lt;/li>
&lt;li>哈希算法类型：SHA-256&lt;/li>
&lt;/ol>
&lt;p>【需求分析】&lt;br>
vastbase支持TLS协议，当vsql与vastbase通信时，双方可使用TLS模块，生成密钥，并使用密钥加密、解密通信数据，包括：SQL语句、SQL执行结果等。&lt;br>
客户可能采用第三方工具，截取网络流量，获取传输中的SQL等数据，进行流量审计。但是，在使用TLS协议的情况下，网络中的数据是密文形式，无法进行流量审计。&lt;/p>
&lt;p>vastbase提供1个GUC参数ssl_ciphers，用于配置TLS协议采用的算法套件，旧版本，该参数的取值范围如下：&lt;/p>
&lt;ul>
&lt;li>ECDHE-ECDSA-AES256-GCM-SHA384&lt;/li>
&lt;li>ECDHE-RSA-AES256-GCM-SHA384&lt;/li>
&lt;li>DHE-RSA-AES256-GCM-SHA384&lt;/li>
&lt;li>ECDHE-ECDSA-AES128-GCM-SHA256&lt;/li>
&lt;li>DHE-RSA-AES128-GCM-SHA256&lt;/li>
&lt;li>ECDHE-RSA-AES128-SHA256&lt;/li>
&lt;li>ECDHE-ECDSA-SM4-CBC-SM3&lt;/li>
&lt;li>4个仅tassl支持的国密算法套件&lt;/li>
&lt;/ul>
&lt;p>上述7个套件中，密钥生成协议为：ECDHE、DHE，此类DH协议，无法让第三方工具获取密钥。&lt;/p>
&lt;p>本版本，新增4个算法套件：&lt;/p>
&lt;ul>
&lt;li>AES128-SHA256&lt;/li>
&lt;li>AES256-SHA256&lt;/li>
&lt;li>AES128-GCM-SHA256&lt;/li>
&lt;li>AES256-GCM-SHA384&lt;/li>
&lt;/ul>
&lt;p>上述4个套件，密钥生成协议为：RSA，该协议可让第三方工具获取密钥，使其可解密网络流量，获取SQL语句、SQL执行结果等。&lt;/p>
&lt;p>【需求实现】&lt;br>
之前，vastbase限制ssl_ciphers的取值范围，仅放开7个算法套件，本版本，将新增放开4个算法套件。&lt;/p>
&lt;p>实现时，仅修改ssl_ciphers的取值范围，新增支持4个算法套件[AES128-SHA256、AES256-SHA256、AES128-GCM-SHA256、AES256-GCM-SHA384]，4个算法套件将直接传递给libssl.so，内核不做任何处理。&lt;/p>
&lt;p>因此，本需求无复杂设计。本文主要介绍完整的TLS协议工作原理。&lt;/p>
&lt;h2 id="12-实现方案">1.2 实现方案&lt;/h2>
&lt;h3 id="一ecdhe与rsa的区别">一、ECDHE与RSA的区别&lt;/h3>
&lt;p>此处简化ECDHE与RSA的步骤与算法，提取最核心的原理，方便快速理解。&lt;/p>
&lt;ul>
&lt;li>
&lt;p>一、ECDHE密钥协商协议&lt;br>
第三方工具、攻击者完全无法获取密钥。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">client server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+-------------------------------------------+-----------------------------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &amp;lt;---- 0. 双方随机约定一些公开参数 ------&amp;gt; &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 1. 生成随机私钥 client_priv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 2. 基于client_priv，计算公钥 client_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 3. 发送公钥 client_pub ------------&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 4. 接收公钥 client_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 5. 生成随机私钥 server_priv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 6. 基于server_priv，计算公钥 server_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;lt;------------ &lt;span class="p">|&lt;/span> 7. 发送公钥 server_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 8. 接收公钥 server_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 9. 基于client_priv，server_pub，计算密钥
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 10. 基于server_priv，client_pub，计算密钥
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">（第9步和第10步，可以计算出相同的密钥）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">简单举个例子
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">client server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+-------------------------------------------+-----------------------------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &amp;lt;----- 0. generate and send &lt;span class="o">(&lt;/span>2,11&lt;span class="o">)&lt;/span> ----&amp;gt; &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 1. generate &lt;span class="m">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 2. caculate &lt;span class="o">(&lt;/span>&lt;span class="m">8&lt;/span> * 2&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 3. send &lt;span class="m">5&lt;/span> ----------&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 4. receive &lt;span class="m">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 5. generate &lt;span class="m">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 6. caculate &lt;span class="o">(&lt;/span>&lt;span class="m">10&lt;/span> * 2&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;lt;------------ &lt;span class="p">|&lt;/span> 7. send &lt;span class="m">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 8. receive &lt;span class="m">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 9. &lt;span class="nv">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="m">8&lt;/span> * 9&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 10. &lt;span class="nv">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="m">10&lt;/span> * 5&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">攻击者：截获网络流量，获取2,11,5,9，无法计算出密钥为6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>二、RSA密钥交换协议&lt;/p></description></item><item><title>海量 10 需求 SSL协议</title><link>https://my-blog.j8465383071.workers.dev/posts/projectdocs/10-requirement-ssl/</link><pubDate>Wed, 03 Sep 2025 11:07:00 +0800</pubDate><guid>https://my-blog.j8465383071.workers.dev/posts/projectdocs/10-requirement-ssl/</guid><description>&lt;h1 id="1-简介">1 简介&lt;/h1>
&lt;h2 id="11-目的">1.1 目的&lt;/h2>
&lt;p>在应用与数据库传输数据时，为避免攻击者对数据进行窃听、篡改、伪造、重放等攻击，Vastbase支持采用TLS协议保障数据机密性与完整性。&lt;br>
通过TLS协议，应用传输数据指至服务端路程如下：&lt;/p>
&lt;ol>
&lt;li>建立连接：与数据建立TCP连接&lt;/li>
&lt;li>生成密钥(TLS)：采用TLS协议协商生成密钥(连接级)&lt;/li>
&lt;li>加密数据(TLS)：使用密钥加密数据(SQL等)&lt;/li>
&lt;li>发送数据：通过TCP协议，发送数据密文至数据库&lt;/li>
&lt;/ol>
&lt;p>客户可能采用第三方工具，截取网络流量，获取传输中的SQL等数据，进行流量审计。但是，在使用TLS协议的情况下，网络中的数据是密文形式，无法进行流量审计。为解决该问题，本文介绍如何让第三方工具获取密钥，以解密网络中的数据密文。&lt;/p>
&lt;h2 id="12-适用范围">1.2 适用范围&lt;/h2>
&lt;p>本文适用于3.0.8 psu4以之后版本。未来本需求将同步至2.2.15版本。&lt;/p>
&lt;h2 id="13-术语定义首字母缩写词和缩略语">1.3 术语定义、首字母缩写词和缩略语&lt;/h2>
&lt;ul>
&lt;li>SSL: Secure Sockets Layer，于保障网络通信安全的加密协议，早期协议，存在设计缺陷，目前由TLS协议替代。但是，SSL也可不特指SSL协议，可泛指所有通信安全加密协议。同时，由于历史原因，以及前向兼容，数据库中的很多参数与接口采用SSL命令，实际使用的是TLS协议。无需纠结TLS与SSL差异，vastbase中SSL等于TLS。&lt;/li>
&lt;li>TLS: Transport Layer Security，更安全的传输加密协议。早期版本1.0,1.1已不安全，主流版本为1.2,1.3。&lt;/li>
&lt;/ul>
&lt;h2 id="13-参考资料">1.3 参考资料&lt;/h2>
&lt;ul>
&lt;li>原始需求：&lt;a href="https://www.tapd.cn/tapd_fe/60475194/story/detail/1160475194001084569">https://www.tapd.cn/tapd_fe/60475194/story/detail/1160475194001084569&lt;/a>&lt;/li>
&lt;li>openssl支持的所有cipers： &lt;a href="https://docs.openssl.org/3.0/man1/openssl-ciphers/">https://docs.openssl.org/3.0/man1/openssl-ciphers/&lt;/a>&lt;/li>
&lt;li>ssl与tls原理：博客写了一点点，没整理&lt;/li>
&lt;/ul>
&lt;h1 id="2-tls协议支持第三方流量审计">2 TLS协议支持第三方流量审计&lt;/h1>
&lt;h2 id="21-功能简述">2.1 功能简述&lt;/h2>
&lt;p>【需求现状】&lt;br>
目前，大部分第三方流量审计工具，可在一些特定场景下，解密由TLS协议加密后的数据。以vastbase为例，使用TLS协议分为以下阶段：&lt;/p>
&lt;ol>
&lt;li>生成证书、私钥文件&lt;/li>
&lt;li>vastbase端配置证书、私钥文件&lt;/li>
&lt;li>vsql端配置证书、私钥文件&lt;/li>
&lt;li>vsql连接vastbase&lt;br>
4.1 建立tcp连接&lt;br>
4.2 使用证书校验对方身份&lt;br>
4.3 双发协商选择算法套件：包括密钥生成协议、加密算法等&lt;br>
4.4 双方协商生成密钥&lt;/li>
&lt;li>vsql与vastbase传输数据&lt;br>
5.1 发送数据前，使用密钥加密数据&lt;br>
5.2 发送数据密文&lt;br>
在4.3步骤中，可配置不同的密钥生成协议，对于其中一部分协议，在步骤4.4中，第三方工具可获取密钥，第步骤5.2中，第三方工具截取数据密文后，即可解密数据。&lt;br>
但是，4.3步骤中，目前vastbase仅支持2种密钥生成协议，这2种协议都无法让第三方工具获取密钥。&lt;/li>
&lt;/ol>
&lt;p>【密钥生成协议】&lt;br>
此处介绍2类常见的密钥生成协议：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>一、DHE密钥协商协议&lt;br>
Vastbase目前支持的2种协议，都属于此类协议&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">client server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+-------------------------------------------+-----------------------------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &amp;lt;-------- 0. 双方随机约定一些参数 ------&amp;gt; &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 1. 生成随机私钥 client_priv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 2. 基于client_priv，计算公钥 client_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 3. 发送公钥 client_pub ------------&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 4. 接收公钥 client_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 5. 生成随机私钥 server_priv
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 6. 基于server_priv，计算公钥 server_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;lt;------------ &lt;span class="p">|&lt;/span> 7. 发送公钥 server_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 8. 接收公钥 server_pub
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 9. 基于client_priv，server_pub，计算密钥
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 10. 基于server_priv，client_pub，计算密钥
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">（第9步和第10步，可以计算出相同的密钥）
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">简单举个例子
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">client server
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">+-------------------------------------------+-----------------------------------
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> &amp;lt;----- 0. generate and send &lt;span class="o">(&lt;/span>2,11&lt;span class="o">)&lt;/span> ----&amp;gt; &lt;span class="p">|&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 1. generate &lt;span class="m">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 2. caculate &lt;span class="o">(&lt;/span>&lt;span class="m">8&lt;/span> * 2&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 3. send &lt;span class="m">5&lt;/span> ----------&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 4. receive &lt;span class="m">5&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 5. generate &lt;span class="m">10&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 6. caculate &lt;span class="o">(&lt;/span>&lt;span class="m">10&lt;/span> * 2&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &amp;lt;------------ &lt;span class="p">|&lt;/span> 7. send &lt;span class="m">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 8. receive &lt;span class="m">9&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">|&lt;/span> 9. &lt;span class="nv">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="m">8&lt;/span> * 9&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">|&lt;/span> 10. &lt;span class="nv">key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">(&lt;/span>&lt;span class="m">10&lt;/span> * 5&lt;span class="o">)&lt;/span> % &lt;span class="nv">11&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="m">6&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">攻击者：截获网络流量，获取2,11,5,9，无法计算出密钥为6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>
&lt;p>二、RSA密钥交换协议&lt;br>
该协议支持第三方工具解密流量，客户选择的工具已适配该协议。TLS还支持其他PSK、SRP等协议，但是，由于这些协议比较少见，且客户选择的工具未适配，本次不适配其他协议。&lt;/p></description></item></channel></rss>