首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MariaDB SSL使用自签名客户端证书和letsencrypt签名服务器证书

MariaDB SSL使用自签名客户端证书和letsencrypt签名服务器证书
EN

Stack Overflow用户
提问于 2022-08-04 00:18:41
回答 1查看 244关注 0票数 0

如果服务器端证书是通过via加密完成的,那么如何使用自签名证书来加密与MariaDB的客户端通信呢?

我发现的大多数教程,比如https://www.cyberciti.biz/faq/how-to-setup-mariadb-ssl-and-secure-connections-from-clients/,都向您展示了如何将服务器和客户端证书设置为自签名,共享相同的CA (证书颁发机构)证书。这种方式如预期的那样工作,当我通过命令行连接到DB时,它与客户端加密一起工作。

/etc/my.cnf:

代码语言:javascript
复制
[mariadb]
ssl_cert=/certs/server-cert.pem
ssl_key=/certs/server-key.pem
ssl_ca=/certs/ca-cert.pem

/etc/mysql/mariadb.conf.d/50-mysql-clients.cnf:

代码语言:javascript
复制
[mysql]
ssl-ca=/certs/ca-cert.pem
ssl-cert=/certs/client-cert.pem
ssl-key=/certs/client-key.pem

使用此配置,此命令可以工作:mysql -u root -p -h mysite.com --port=3310 --protocol=TCP --ssl-cert=/certs/client-cert.pem --ssl-key=/certs/client-key.pem --ssl-ca=/certs/ca-cert.pem --ssl-verify-server-cert

请注意,我自己生成了ca-cert.pem,并使用它同时对服务器和客户端证书进行了签名,并且这些证书得到了正确的验证,并且在登录和检查服务器状态之后,它指示正在使用SSL。

此设置在开发过程中运行良好,但现在我的数据库正在生产中,我希望在服务中使用letsencrypt证书。如果我将/etc/my.cnf文件中的服务器端证书替换为letsencrypt提供的证书,如下所示:

/etc/my.cnf:

代码语言:javascript
复制
[mariadb]
ssl_cert=/certs/cert.pem
ssl_key=/certs/privkey.pem
ssl_ca=/certs/chain.pem

但是,将50-mysql-clients.cnf文件与自签名的客户端证书放在一起,它不再允许我使用证书登录。如果我不再尝试使用客户端证书,它仍然允许我使用ssl登录,状态检查表明它仍然在使用SSL,但是文档说,这样客户端数据包就不会加密,只有服务器。

工作的命令:mysql -u root -p -h mysite.com --port=3310 --protocol=TCP --ssl-verify-server-cert

命令不再起作用:mysql -u root -p -h mysite.com --port=3310 --protocol=TCP --ssl-cert=/certs/client-cert.pem --ssl-key=/certs/client-key.pem --ssl-ca=/certs/ca-cert.pem --ssl-verify-server-cert

错误消息:ERROR 2026 (HY000): SSL connection error: unable to get local issuer certificate

使用命令中生成的服务器证书-- letsencrypt --也不能工作:mysql -u root -p -h mysite.com --port=3310 --protocol=TCP --ssl-ca=/certs/chain.pem --ssl-cert=/certs/cert.pem --ssl-key=/certs/privkey.pem --ssl-verify-server-cert

错误消息:ERROR 2026 (HY000): SSL connection error: unable to get issuer certificate

状态检查:

代码语言:javascript
复制
MariaDB [(none)]> status
--------------
mysql  Ver 15.1 Distrib 10.5.8-MariaDB, for osx10.15 (x86_64) using readline 5.1

Connection id:      4
Current database:
Current user:       root@myipaddress
SSL:            Cipher in use is TLS_AES_256_GCM_SHA384
Current pager:      less
Using outfile:      ''
Using delimiter:    ;
Server:         MariaDB
Server version:     10.5.4-MariaDB-1:10.5.4+maria~focal mariadb.org binary distribution
Protocol version:   10
Connection:     mysite.com via TCP/IP
Server characterset:    utf8mb4
Db     characterset:    utf8mb4
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:       3310
Uptime:         3 min 33 sec

在使用MariaDB的letsencrypt证书时,我如何仍然可以同时使用客户端和服务器进行双向ssl加密?

EN

回答 1

Stack Overflow用户

发布于 2022-08-04 15:11:07

太久了不能发表评论..。

  1. 单向TLS意味着服务器向客户端发送证书,客户端验证证书。双向TLS意味着客户端也向服务器发送证书,服务器验证客户端证书。后一种情况只发生在需要的X509、REQUIRE和/或REQUIRE发行者子句为帐户指定的情况下。如果没有指定要求,则不必指定客户端证书.

  1. 无论采用哪一种或两种方式,TLS连接总是向两个方向发送加密数据(除非OpenSSL构建时不支持任何密码,并且客户端指定了无密码)。

  1. 错误消息:“无法获得本地颁发者证书”意味着根证书链中缺少某些内容。如果它不是自签名证书,则应该使用系统ca (不指定ssl-ca或ssl- ca路径)验证它,或者将服务器证书添加到ca文件中.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73229104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档