• 达梦数据库配置SSL认证加密


    环境介绍

    OS Version:Kylin Linux Advanced Server release V10 (SP1) /(Tercel)-x86_64-Build19/20210319

    DB Version:DM V8 1-2-18-21.06.24-142387-10013-ENT Pack4

    OpenSSL:OpenSSL 1.1.1f

    JAVA:openjdk version “1.8.0_242” 64bit

    参考手册:《DM8_DISQL使用手册》《DM8安全管理》《DM8程序员手册》

    DM8 产品手册 | 达梦技术社区

    操作过程

    1、配置openssl配置文件

    KylinV10 SP1或者Centos 7默认配置文件为/etc/pki/tls/openssl.cnf。也可以单独创建一个配置文件,在操作时指定该配置文件。

    备份openssl.cnf文件,并修改[ CA_default ]这一段内容部分配置项,其余默认。

    [ CA_default ]
    
    dir		= /opt/ca		# Where everything is kept
    certs		= $dir/certs		# Where the issued certs are kept
    crl_dir		= $dir/crl		# Where the issued crl are kept
    database	= $dir/index.txt	# database index file.
    #unique_subject	= no			# Set to 'no' to allow creation of
    					# several certs with same subject.
    new_certs_dir	= $dir/newcerts		# default place for new certs.
    
    certificate	= $dir/ca-cert.pem 	# The CA certificate
    serial		= $dir/serial 		# The current serial number
    crlnumber	= $dir/crlnumber	# the current crl number
    					# must be commented out to leave a V1 CRL
    crl		= $dir/crl.pem 		# The current CRL
    private_key	= $dir/ca-key.pem          # The private key
    
    x509_extensions	= usr_cert		# The extensions to add to the cert
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2、创建配置文件中对应的主要目录和文件

    [root@localhost ~]# mkdir -p /opt/ca
    [root@localhost ~]# cd /opt/ca
    [root@localhost ca]# mkdir {certs,crl,newcerts}
    [root@localhost ca]# echo "01" > serial
    [root@localhost ca]# touch index.txt
    ##创建达梦数据库服务器和客户端证书文件存放目录
    [root@localhost ca]# mkdir server_ssl
    [root@localhost ca]# mkdir client_ssl
    ##创建SYSDBA用户客户端证书存放目录,其他用户请创建与用户名相同的目录
    [root@localhost ca]# mkdir -p client_ssl/SYSDBA  
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3、生成CA私钥和根证书

    [root@localhost ca]# openssl req -new -x509 -days 3650 -keyout ca-key.pem -out ca-cert.pem -subj "/C=cn/ST=hunan/L=changsha/O=dameng/OU=dev/CN=lw/emailAddress=abc@dm.com"
    Generating a RSA private key
    .....................................................................................+++++
    ......................................+++++
    writing new private key to 'ca-key.pem'
    Enter PEM pass phrase:                        #设置CA私钥的存储密码,本次测试设置为123456
    Verifying - Enter PEM pass phrase:
    -----
    [root@localhost ca]# ls
    ca-cert.pem  ca-key.pem  certs  client_ssl  crl  index.txt  newcerts  serial  server_ssl
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    ca-key.pem 为私钥文件,ca-cert.pem为根证书

    文件后缀简要说明:

    • .key : 私钥文件, 也可以使用“.pem”后缀。.pem”后缀时,通常文件包含证书和私钥中的一种或者多种
    • .csr : 证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
    • .crl : 证书吊销列表,Certificate Revocation List的缩写

    4、生成服务器私钥和被CA签名的证书

    (1)生成私钥文件

    [root@localhost ca]# openssl genrsa -out server_ssl/server-key.pem
    Generating RSA private key, 2048 bit long modulus (2 primes)
    .................................................................................................................+++++
    ..............................................................+++++
    e is 65537 (0x010001)
    
    ##注意服务器端的私钥,为了方便不设置加密
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:

        如果服务端的私钥是带存储密码的,那么启动服务器的时候一定要使用命令行方式来启动,即dmserver c:\dmdbms\data\DAMENG\dm.ini,否则不能开启通信加密认证,因为只有这种方式才会让输入服务端私钥的密码。

    (2)生成证书签发申请

    [root@localhost ca]# openssl req -new -key server_ssl/server-key.pem -out server_ssl/server.csr -subj "/C=cn/ST=hunan/L=changsha/O=dameng/OU=dev/CN=server/emailAddress=server@dm.com
    
    • 1

    subj选项说明:

    • Country Name : 缩写为“C” 证书持有者所在国家 要求填写国家代码
    • State or Province Name : 缩写为“ST“ 证书持有者所在州或省份
    • Locality Name : 缩写为“L” 证书持有者所在城市
    • Organization Name : 缩写为“O“ 证书持有者所属组织或公司
    • Organizational Unit Name : 缩写为“OU” 证书持有者所属部门
    • Common Name : 缩写为“CN“ 证书持有者的通用名
    • Email Address : 证书持有者的通信邮箱

    (3)使用根证书和签发申请生成证书

    [root@localhost ca]# openssl ca -days 3650 -in server_ssl/server.csr -out server_ssl/server-cert.pem
    Using configuration from /etc/pki/tls/openssl.cnf
    Enter pass phrase for /opt/ca/ca-key.pem:                #输入生成CA私钥时设置的存储密码,上面设置的是123456
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 1 (0x1)
            Validity
                Not Before: Aug 11 09:23:40 2021 GMT
                Not After : Aug  9 09:23:40 2031 GMT
            Subject:
                countryName               = cn
                stateOrProvinceName       = hunan
                organizationName          = dameng
                organizationalUnitName    = dev
                commonName                = server
                emailAddress              = server@dm.com
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    46:E9:80:E8:CC:1D:7E:DB:E3:05:FF:8C:3B:77:43:51:9B:16:05:43
                X509v3 Authority Key Identifier: 
                    keyid:61:05:BE:3F:A9:DE:2D:9A:7F:2A:BA:0E:45:97:47:5B:E8:0C:D7:7E
    
    Certificate is to be certified until Aug  9 09:23:40 2031 GMT (3650 days)
    Sign the certificate? [y/n]:y                       #输入y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y      #输入y
    Write out database with 1 new entries
    Data Base Updated
    
    • 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

    (4)将证书格式转换为x509格式

    [root@localhost ca]# openssl x509 -in server_ssl/server-cert.pem -out server_ssl/server.cer
    [root@localhost ca]# ll server_ssl/
    -rw-r--r-- 1 root root 1395  811 17:28 server.cer
    -rw-r--r-- 1 root root 4544  811 17:23 server-cert.pem
    -rw-r--r-- 1 root root 1033  811 17:13 server.csr
    -rw------- 1 root root 1675  811 17:06 server-key.pem
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (5)将CA自签名的证书拷贝到server_ssl目录中

    [root@localhost ca]# cp ca-cert.pem server_ssl/
    [root@localhost ca]# cp ca-key.pem server_ssl/
    
    • 1
    • 2

    5、生成客户端用户私钥和被CA签名的证书

    (1)生成私钥文件

    [root@localhost ca]# openssl genrsa -aes256 -out client_ssl/SYSDBA/client-key.pem
    Generating RSA private key, 2048 bit long modulus (2 primes)
    ............................+++++
    ..+++++
    e is 65537 (0x010001)
    Enter pass phrase for client_ssl/SYSDBA/client-key.pem:               #设置私钥密码,本次测试设置为dameng
    Verifying - Enter pass phrase for client_ssl/SYSDBA/client-key.pem:  #再输入一次
    
    #-aes256表示使用AES算法对产生的私钥加密
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    (2)生成证书签发申请

    [root@localhost ca]# openssl req -new -key client_ssl/SYSDBA/client-key.pem -out client_ssl/SYSDBA/client.csr -subj "/C=cn/ST=hunan/L=changsha/O=dameng/OU=dev/CN=SYSDBA/emailAddress=dmclient@dm.com"
    Enter pass phrase for client_ssl/SYSDBA/client-key.pem:  #输入上一步生成私钥文件时设置的密码
    
    • 1
    • 2

    (3)使用根证书和签发申请生成证书

    [root@localhost ca]# openssl ca -days 365 -in client_ssl/SYSDBA/client.csr -out client_ssl/SYSDBA/client-cert.pem
    Using configuration from /etc/pki/tls/openssl.cnf
    Enter pass phrase for /opt/ca/ca-key.pem:         #输入设置的CA私钥存储密码
    Check that the request matches the signature
    Signature ok
    Certificate Details:
            Serial Number: 2 (0x2)
            Validity
                Not Before: Aug 11 09:39:23 2021 GMT
                Not After : Aug 11 09:39:23 2022 GMT
            Subject:
                countryName               = cn
                stateOrProvinceName       = hunan
                organizationName          = dameng
                organizationalUnitName    = dev
                commonName                = SYSDBA
                emailAddress              = dmclient@dm.com
            X509v3 extensions:
                X509v3 Basic Constraints: 
                    CA:FALSE
                Netscape Comment: 
                    OpenSSL Generated Certificate
                X509v3 Subject Key Identifier: 
                    E1:BB:5E:A0:E6:7C:38:40:FD:BB:6B:B8:2E:6E:2C:46:1C:E3:AF:1C
                X509v3 Authority Key Identifier: 
                    keyid:61:05:BE:3F:A9:DE:2D:9A:7F:2A:BA:0E:45:97:47:5B:E8:0C:D7:7E
    
    Certificate is to be certified until Aug 11 09:39:23 2022 GMT (365 days)
    Sign the certificate? [y/n]:y                #输入y
    
    
    1 out of 1 certificate requests certified, commit? [y/n]y        #输入y
    Write out database with 1 new entries
    Data Base Updated
    
    • 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

    (4)将生成的X509格式的client-key.pem和client-cert.pem合并转换为pkcs12格式的文件client-pkcs.p12

    [root@localhost ca]# openssl pkcs12 -export -inkey client_ssl/SYSDBA/client-key.pem -in client_ssl/SYSDBA/client-cert.pem -out client_ssl/SYSDBA/client-pkcs.p12
    Enter pass phrase for client_ssl/SYSDBA/client-key.pem:    #输入之前设置的客户端私钥存储密码(dameng)
    Enter Export Password:            #设置export password,本次测试设置为abc123
    Verifying - Enter Export Password: #再输入一次
    
    • 1
    • 2
    • 3
    • 4

    (5)生成JDBC访问需要的.keystore文件

    导入所有证书到keystore文件,并设置keystore文件密码为abc123(-deststorepass)

    [root@localhost ca]# keytool -import -alias ca -trustcacerts -file ca-cert.pem -keystore client_ssl/SYSDBA/.keystore -deststorepass abc123 -noprompt
    证书已添加到密钥库中
    [root@localhost ca]# keytool -import -alias server -trustcacerts -file server_ssl/server.cer -keystore client_ssl/SYSDBA/.keystore -deststorepass abc123 -noprompt
    证书已添加到密钥库中
    [root@localhost ca]# keytool -importkeystore -srckeystore client_ssl/SYSDBA/client-pkcs.p12 -srcstorepass abc123  -srcstoretype PKCS12 -keystore client_ssl/SYSDBA/.keystore  -deststorepass abc123
    正在将密钥库 client_ssl/SYSDBA/client-pkcs.p12 导入到 client_ssl/SYSDBA/.keystore...
    已成功导入别名 1 的条目。
    已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消
    
    Warning:
    JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore client_ssl/SYSDBA/.keystore -destkeystore client_ssl/SYSDBA/.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    执行上面警告的内容:(可选)

    [root@localhost ca]# keytool -importkeystore -srckeystore client_ssl/SYSDBA/.keystore -destkeystore client_ssl/SYSDBA/.keystore -deststoretype pkcs12
    输入源密钥库口令:           #输入之前的export password,abc123
    已成功导入别名 ca 的条目。
    已成功导入别名 1 的条目。
    已成功导入别名 server 的条目。
    已完成导入命令: 3 个条目成功导入, 0 个条目失败或取消
    
    Warning:
    已将 "client_ssl/SYSDBA/.keystore" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "client_ssl/SYSDBA/.keystore.old" 进行了备份。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    (6)将CA自签名的证书拷贝到client_ssl/SYSDBA目录中

    [root@localhost ca]# cp ca-cert.pem client_ssl/SYSDBA/
    [root@localhost ca]# ls -la client_ssl/SYSDBA/
    drwxr-xr-x 2 root root  128  811 18:07 .
    drwxr-xr-x 3 root root   20  811 16:54 ..
    -rw-r--r-- 1 root root 1383  811 18:07 ca-cert.pem
    -rw-r--r-- 1 root root 4546  811 17:39 client-cert.pem
    -rw-r--r-- 1 root root 1037  811 17:37 client.csr
    -rw------- 1 root root 1766  811 17:34 client-key.pem
    -rw------- 1 root root 2589  811 17:49 client-pkcs.p12
    -rw-r--r-- 1 root root 4363  811 18:06 .keystore
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    6、部署SERVER端证书

    将/opt/ca/server_ssl整个目录拷贝到达梦数据库安装目录下的bin目录下,默认在bin目录下存在server_ssl目录。可以先将默认的server_ssl目录重命名,然后拷贝。

    [root@localhost ca]# cd /home/dmdba/dmdbms/bin
    [root@localhost bin]# mv server_ssl server_ssl_bak2
    [root@localhost bin]# cp /opt/ca/server_ssl ./ -r
    [root@localhost bin]# chmod -R 777 server_ssl
    [root@localhost bin]# ll server_ssl
    -rwxrwxrwx 1 root root 1383  8月 11 18:11 ca-cert.pem
    -rwxrwxrwx 1 root root 1854  8月 11 18:11 ca-key.pem
    -rwxrwxrwx 1 root root 1395  8月 11 18:11 server.cer
    -rwxrwxrwx 1 root root 4544  8月 11 18:11 server-cert.pem
    -rwxrwxrwx 1 root root 1033  8月 11 18:11 server.csr
    -rwxrwxrwx 1 root root 1675  8月 11 18:11 server-key.pem
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    7、部署client端证书

    将/opt/ca/client_ssl整个目录拷贝到客户端机器上。如果是Linux机器,需要注意目录权限,可以将整个目录设置为777权限。

    chmod 777 -R client_ssl
    
    • 1

    如果是通过jdbc接口来加密访问数据库,是使用的.keystore文件;

    如果是通过ODBC或者其他方式加密访问数据库,那么是使用ca-cert.pem、client-cert.pem和client-key.pem三个文件。

    8、数据库启用SSL认证和通信加密

      是否使用通信加密以DM数据库服务器端的设置为准,即通过设置服务器配置文件dm.ini中的ENABLE_ENCRYPT或者COMM_ENCRYPT_NAME参数来指定,ENABLE_ENCRYPT可以开启传输层通讯加密,COMM_ENCRYPT_NAME可以开启应用层消息通讯加密,两个层次上的加密是互不干扰,互不影响,可以同时开启这两个层次上的加密,也可以开启其中一个,如果开启传输层消息加密需要配置SSL证书。客户端以服务器采用的通信方式与其进行通信。

      ENABLE_ENCRYPT:取值0、1和2,含义义分别为:

    0表示在传输层不开启SSL认证和SSL通信加密;
    1表示在传输层开启SSL认证和SSL通信加密;
    2表示在传输层仅开启SSL认证,但不开启SSL加密。

      COMM_ENCRYPT_NAME参数用来指定应用层消息通信的加密算法名,指定加密算法后,即可开启应用层通信加密(无需配置ENABLE_ENCRYPT)。如果为空则不进行通信加密;如果给的加密算法名错误,则使用加密算法DES_CFB。应用层的这种加密非常适合两端缺少数字证书的情况。
    DM支持的加密算法名可以通过查询动态视图V$CIPHERS获取。

    修改数据库参数:

    ---开启应用层通讯加密(测试通讯加密)
    SQL> SF_SET_SYSTEM_PARA_VALUE('COMM_ENCRYPT_NAME','RC4',1,2);
    DMSQL 过程已成功完成
    已用时间: 7.093(毫秒). 执行号:500.
    
    ---开启SSL认证(测试SSL认证登录)
    SQL> SF_SET_SYSTEM_PARA_VALUE('ENABLE_ENCRYPT',2,1,2);
    DMSQL 过程已成功完成
    已用时间: 5.268(毫秒). 执行号:501.
    SQL> SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT' OR NAME='COMM_ENCRYPT_NAME';
    
    行号     ID          NAME              TYPE    VALUE SYS_VALUE FILE_VALUE
    ---------- ----------- ----------------- ------- ----- --------- ----------
               DESCRIPTION                                                                                 
               --------------------------------------------------------------------------------------------
    1          454         ENABLE_ENCRYPT    IN FILE 0     0         2
               Encrypt Mode For Communication, 0: Without Encryption; 1: SSL Encryption; 2: SSL Authentication
    
    2          476         COMM_ENCRYPT_NAME IN FILE                 RC4
               Communication encrypt name, if it is null then the communication is not encrypted
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    重启数据库生效。

    使用SSL认证登录测试

    如果是通过jdbc接口来加密访问数据库,是使用的.keystore文件,所以SSL认证密码是keystore文件的密码;

    如果是通过ODBC或者其他方式加密访问数据库,那么是使用ca-cert.pem、client-cert.pem和client-key.pem三个文件,所以SSL密码为客户端私钥密码。

    (1)disql工具登录:

    [dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA@192.168.15.35:5236#"{SSL_PATH=/opt/ca/client_ssl/SYSDBA,SSL_PWD=dameng}"
    
    服务器[192.168.15.35:5236]:处于普通打开状态
    登录使用时间 : 10.115(ms)
    disql V8
    SQL> 
    ###或者使用
    [dmdba@localhost bin]$ ./disql /nolog
    disql V8
    SQL> login
    服务名:192.168.15.35
    用户名:SYSDBA
    密码:
    SSL路径:/opt/ca/client_ssl/SYSDBA
    SSL密码:
    UKEY名称:
    UKEY PIN码:
    MPP类型:
    是否读写分离(y/n):
    协议类型:
    
    服务器[192.168.15.35:5236]:处于普通打开状态
    登录使用时间 : 9.059(ms)
    SQL> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    (2)管理工具登录

    管理工具连接数据库的方式是通过JDBC,所以SSL密码为keystore文件密码,而非客户端私钥密码。

    image-20210811185728224

    image-20210811190511859

    image-20210811190708762

    (3)JDBC程序连接配置

    JDBC通过SSL认证方式登录数据库需要添加连接串属性sslFilesPath和sslKeystorePass,简要配置如下:

    String name="dm.jdbc.driver.DmDriver";
    String url="jdbc:dm://192.168.15.35:5236?sslFilesPath=E:\\dmdbms\\client_ssl\\SYSDBA&sslKeystorePass=abc123";
    String user="SYSDBA";
    String password="SYSDBA";
    
    • 1
    • 2
    • 3
    • 4

    image-20210811191355815

    数据库通信加密测试

    Windows直接使用Wireshark软件,Linux环境使用tcpdump进行抓包,然后使用Wireshark打开抓包数据进行查看验证或者直接查看文件简单搜索进行比较。

    (1)使用tcpdump对加密的数据库访问进行抓包,并将数据保存在dm.cap中

    [root@localhost ~]# tcpdump -i ens33 port 5236 -w dm.cap
    dropped privs to tcpdump
    tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
    ^C29 packets captured
    29 packets received by filter
    0 packets dropped by kernel
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (2)取消数据库加密后,通过tcpdump进行抓包,并将数据保存在dm3.cap中

    [root@localhost ~]# tcpdump -i ens33 port 5236 -w dm3.cap
    dropped privs to tcpdump
    tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
    ^C19 packets captured
    19 packets received by filter
    0 packets dropped by kernel
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (3)对比查看

    非加密情况下,可以看到数据、语句均为明文:

    image-20210811193026326

    image-20210811193048110

    加密情况下,可以看到均为密文:

    image-20210811193248260

    问题处理

    问题1

        JAVA程序使用SSL认证连接数据库是报错:javax.net.ssl.SSLException: Received fatal alert: protocol_version

    可能原因:

        dm JDBC驱动包版本不对或者比较低

    处理办法:

        更换对应达梦数据库版本的JDBC驱动包

    问题2

    [-70070]:初始化SSL环境失败.
    
    • 1

    可能原因:

    (1)输入的SSL验证密码不正确

    (2)证书文件可能存在问题

    (3)无访问客户端证书的权限

    处理办法:

    (1)检查验证客户端私钥密码或者keystore文件密码是否正确,或者直接重新生成客户端证书等文件

    (2)使用多种方式登录测试验证,比如使用disql和jdbc两种方式进行测试验证

    (3)检查当前用户是否有访问客户端证书的权限,或者将证书目录权限设置为777

    chmod 777 -R client_ssl
    
    • 1

    更多资讯请上达梦技术社区了解:https://eco.dameng.com

  • 相关阅读:
    计算机毕业设计 基于SpringBoot房屋租赁管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试
    【华为机试真题 Python】按身高和体重排队
    Lyapunov optimization 李雅普诺夫优化
    Python之FastAPI返回音视频流
    加密 K8s Secrets 的几种方案
    极客的浪漫「GitHub 热点速览 v.22.41」
    Dock的安装和使用
    领域驱动设计(DDD):DDD落地问题和一些解决方法
    java118-vector类
    Ubuntu系统迁移
  • 原文地址:https://blog.csdn.net/Mrkill123/article/details/127459431