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

一只牛_007 2016-07-30 08:10:56
因跨机房访问数据库,需要通过外网访问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 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 );

其中
m_keySSL=/opt/trader,m_cert=/opt/trader,m_ca=/opt/trader
或者在绝对路径后面加上文件名,也是报同样的错误,请高手指点!!
SSL error: Unable to get certificate from '/opt/trader' 证书都放在/opt/trader目录下,mysql命令行都连接成功, 为什么还提示找不到证书?

网上查阅的资料:
使用mysql_ssl_set(),可采用SSL建立安全连接。必须在mysql_real_connect()之前调用它。除非在客户端库中允许了OpenSSL支持,否则mysql_ssl_set()不作任何事。Mysql是从mysql_init()返回的连接处理程序。
· key是key文件的路径名。
· cert是证书文件的路径名。
· ca是证书授权文件的路径名。
· capath是指向目录的路径名,该目录中包含以pem格式给出的受信任SSL CA证书。
· cipher是允许密码的列表,用于SSL加密。
...全文
672 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
LongRui888 2016-08-01
  • 打赏
  • 举报
回复
是不是这个程序在运行时,没有权限访问 /opt/trader 呢

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧