C程序里通过SSL连接mysql失败

发布于 2021-11-28 19:17:34 字数 861 浏览 837 评论 6

因跨机房访问数据库,需要通过外网访问mysql数据库,安全考虑连接时需要进行SSL加密。问题如下:

通过命令行ssl外网连接数据库成功:

[xxxx@EM-F4W9B92]# mysql -u xxx -P 3310 -h xxxxx -p  --ssl-key=/opt/trader/client-key.pem --ssl-cert=/opt/trader/client-cert.pem
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 113278
Server version: 5.7.10-log Source distribution

改用C程序使用ssl连接,失败了:

SSL error: Unable to get certificate from '/opt/trader'
error:SSL connection error

C程序代码如下:

mysql_ssl_set(pConn, m_keySSL.c_str(), m_cert.c_str(), m_ca.c_str(), NULL, NULL);
MYSQL* pTmp = mysql_real_connect(pConn, ip.c_str(), user.c_str(), pwd.c_str(), name.c_str(), port, NULL, 0 );

其中keySSL=/opt/trader,cert=/opt/trader,ca=/opt/trader,及时分别加上文件名也是报同样的错误,请高手指点!!


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

傾城如夢未必闌珊 2021-12-04 14:39:07

引用来自“yizhiniu”的评论

如果在目录名后面证书文件名,报错:Unable to get Private Key,在网上找到这篇文章,明天去公司验证下

http://stackoverflow.com/questions/17704325/mysql-ssl-remote-connection-error-unable-to-get-private-key

查看密钥和重新生成密钥的命令:

1. Use 'openssl rsa -in key.pem -text' to get a printout of the private key.
2. remove a passphrase using openssl rsa -in key.pem -out key_unprot.pem

关于MYSQL中使SSL生效的问题:

http://askubuntu.com/questions/194074/enabling-ssl-in-mysql

官方文档API接口:

http://dev.mysql.com/doc/refman/5.7/en/mysql-real-connect.html

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)

The value ofclient_flagis usually 0, but can be set to a combination of the following flags to enable certain features.

笑红尘 2021-12-04 14:13:28

证书文件是有读写权限的

顾忌 2021-12-04 10:01:12

读写权限呢?

无人问我粥可暖 2021-12-04 06:33:57

如果在目录名后面证书文件名,报错:Unable to get Private Key,在网上找到这篇文章,明天去公司验证下

http://stackoverflow.com/questions/17704325/mysql-ssl-remote-connection-error-unable-to-get-private-key

查看密钥和重新生成密钥的命令:

1. Use 'openssl rsa -in key.pem -text' to get a printout of the private key.
2. remove a passphrase using openssl rsa -in key.pem -out key_unprot.pem

关于MYSQL中使SSL生效的问题:

http://askubuntu.com/questions/194074/enabling-ssl-in-mysql

官方文档API接口:

http://dev.mysql.com/doc/refman/5.7/en/mysql-real-connect.html

MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long client_flag)

The value ofclient_flagis usually 0, but can be set to a combination of the following flags to enable certain features.

眼眸里的那抹悲凉 2021-12-03 10:02:40

SSL error: Unable to get certificate from '/opt/trader'  证书都放在/opt/trader目录下,mysql命令行都连接成功, 为什么还提示找不到证书?

瑾夏年华 2021-12-02 16:26:03

使用mysql_ssl_set(),可采用SSL建立安全连接。必须在
mysql_real_connect()之前调用它。除非在客户端库中允许了OpenSSL支持,否则mysql_ssl_set()不作任何事。Mysql是从mysql_init()返回的连接处理程序。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文