提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:吴园园|2020-06-03 15:03:37.980|阅读 1098 次
概述:本文介绍了如何使用UniDAC和SecureBridge从Delphi建立与MySQL的SSL连接。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
UniDAC (Universal Data Access Components)是一款通用数据库访问组件,提供了多个数据库的直接访问,如针对Windows的Delphi, C++Builder, Lazarus (以及 Free Pascal) , Mac OS X, iOS, Android, Linux和64和32位的FreeBSD等等。我们将长期的经验集于这个小组件,提供统一的数据库连接访问(如oracle、微软SQL等等)。这意味着您可以在您的项目之间轻松地切换不同的数据库,以及创建跨数据库应用程序接口。
UniDAC多年来一直支持MySQL SSL(使用证书)连接。我记得最早的是2013年发布的5.0.1版本。
多年来,需求和连接方法不断发展。UniDAC也是如此。但是,某些要求是如此具体,以至于很难在所有数据库特定功能之间“统一”。因此,Devart为某些特定需求提供了单独的解决方案。Devart的SecureBridge Delphi组件就是这样一种解决方案,您可以使用它建立从Delphi到MySQL数据库的SSL / SSH连接,而无需外部库或软件。我们都知道广泛使用的OpenSSL正在使用外部DLL文件。
在本文中,您将演示如何使用这两种产品UniDAC和SecureBridge来建立与MySQL数据库的SSL连接。
MySQL是Oracle在撰写本文时提供的商业产品。有社区(GPL)下载。另一方面,MariaDB几乎是相同的,这是在Oracle将MySQL更改为商业产品之前从最新的免费MySQL源代码派生而来的。本文将在示例中使用MariaDB,因为这是新的发行版,在最近的Linux发行版中迅速传播并广泛使用。但是,大多数人仍然将MariaDB称为MySQL。在本文中,我将是其中之一,并称其为“ MySQL”而不是MariaDB。
请注意,本文不包含有关安装任何风味的MySQL服务器,修改MySQL配置文件或安装OpenSSL的说明(大多数现有系统默认包含该说明,但有些系统(例如Windows)默认不包含它)或MySQL支持的其他SSL库。
本文还假定已经安装了SecureBridge和UniDAC,并且可以与您拥有的Delphi版本一起使用。本文将使用以下版本:
为MySQL连接准备MySQL
如果您的服务器在虚拟专用服务器(VPS)上运行或已经由管理员安装,则可以跳过本部分,直接转到有关准备UniDAC以与SecureBridge一起使用的部分。
尽管我想在此处包括用于SSL连接指令的详细MySQL设置,但我发现它将重复Internet上已经存在的几乎相同的指令。相反,我只是将您指向以设置您自己的MySQL服务器以进行SSL连接。
即使您完全按照上面的常见问题解答中的说明进行操作,有时也可能会在/var/log/mysql/error.log文件中遇到如下错误:
SSL错误:无法从“ /etc/mysql/ssl/server-key.pem”获取私钥
默认情况下,Linux系统上的OpenSSL创建文件权限为600(仅所有者可读)的某些PEM文件(密钥文件)。由于文件权限限制,MySQL在启动时无法读取它们。为了解决此错误,您必须使用以下shell命令更改证书文件权限:
root @ debian:〜#chmod 644 / etc / mysql / ssl / *
除此之外,提供的FAQ非常详细,可帮助您为启用SSL的连接设置MySQL。
准备与SecureBridge一起使用的UniDAC
UniDAC安装会自动在Delphi中注册数据库组件。但是,它不会自动注册其安装的所有内容。这是因为其中某些组件是特定的。例如,将UniDAC与SecureBridge一起使用需要TCRSSLIOHandler组件。默认情况下,组件的源代码和安装包安装在用户的Document目录中。在我的系统上,安装路径为:
“ C:\ Users \ Ertan \ Documents \ Devart \ UniDAC for RAD Studio 10.3 \ Demos \ TechnologySpecific \ SecureBridge \ Delphi26 \ dacsbridge260.dpk”
“ C:\ Users \ Ertan \ Documents \ Devart \ UniDAC for RAD Studio 10.3 \ Demos \ TechnologySpecific \ SecureBridge \ Delphi26 \ dcldacsbridge260.dpk”
上面的第一个文件是运行时,第二个文件是设计时包。您需要使用Delphi以给定的顺序打开这些文件,然后一个一个地构建它们。对于第二个软件包,您还需要在编译后进行安装。可以使用Delphi默认屏幕布局右上角的Projects进行编译和安装。请注意,运行时程序包的弹出菜单中未显示“安装”选项。您将只对该程序包进行编译和构建。
实际上,您可能需要使用“以管理员身份运行”来启动Delphi,然后才能实际构建和安装上述软件包。这是因为UniDAC默认安装在“ C:\ Program Files(x86)\ Devart \ UniDAC for RAD Studio 10.3”目录中,只有具有管理员权限的应用程序才能修改文件。
为了使TCRSSHIOHandler和TCRSSLIOHandler组件在Windows x64,macOS,iOS模拟器,iOS设备,Android和64位Linux上运行,必须为每个平台编译运行时程序包(可以在Windows的“目标平台”中选择)项目包)。
为通过SecureBridge的MySQL SSL连接准备项目
您将需要证书文件用于与MySQL服务器的SSL连接。如果您使用的是自签名证书文件,则应在准备用于SSL连接的MySQL时生成它们。如果您已从证书颁发机构处支付了证书,则可能会将这些文件提供给您下载或通过电子邮件发送。
您必须知道磁盘上这些证书文件所在的证书。
正常运行Delphi并将以下组件放在表单/数据模块上:
您的用例可能会有所不同,您可以将TScFileStorage更改为TScMemoryStorage或TScRegStorage。即使本文使用TScFileStorage,提供的代码示例也适用于所有这些组件。仅在提供的代码示例中更改组件名称就足够了。
设置UniConnection1,以便可以直接连接到MySQL服务器(无SSL)。您只需要将SpecificOptions.Protocol设置为mpSSL即可启动安全连接。如果未设置该特定选项,则连接将是常规的普通连接,因此记住将其打开很重要。然后,必须按照以下顺序将组件相互连接。
UniConnection1.IOHandler-> CRSSLIOHandler1
CRSSLIOHandler1.Storage-> ScFileStorage1
现在,我们必须将证书文件加载到ScFileStorage1组件。为此,您应该按照以下步骤操作:
1、双击ScFileStorage1。
2、在出现的窗口中切换到“ 证书”选项卡。
3、单击新建按钮。
4、单击新建按钮。
请注意,某些SSL连接可能不需要您提供CA证书,并且可能根本没有CA证书。在这种情况下,最好完全不加载任何CA证书。
就我而言,我不需要任何CA证书,并且在加载客户端证书之后,上述窗口如下所示。
现在,您可以单击“ 关闭”按钮,然后选择CRSSLIOHandler1组件。使用对象检查器,将CertName设置为“ client-cert ”,如果您具有CA证书,还将CACertName设置为“ ca-cert ”。最后,将SecurityOptions.TrustServerCertificate设置为True。如果您没有使用可信任的证书颁发机构提供的付费证书,可以在线检查其有效性,那么这最后一部分尤为重要。这种在线有效性检查对于所有类型的证书都是通用的。
最后,我们应该将UniConnection1.Options.KeepDesignConnected设置为False。在尝试建立连接之前,加载运行时证书密钥文件是必需的。
至此,我们完成了设计时间参数的设置。现在,我们需要在运行时加载密钥文件(证书密钥)。
在尝试建立与服务器的连接之前,必须加载证书密钥文件。我选择使用以下代码在DataModule.OnCreate()上执行此操作:
procedure TDM.DataModuleCreate(Sender: TObject); var Cert: TScCertificate; begin Cert := ScFileStorage1.Certificates.FindCertificate('client-cert'); if Cert <> nil then begin Cert.Key.ImportFrom('C:\Users\Ertan\Desktop\mysql sertifikalar\client-key.pem'); UniConnection1.Open(); UniQuery1.Open(); end; end;
上面的代码首先在ScFileStorage1组件中查找名为“ client-cert ”的证书,如果找到,则从磁盘文件中导入客户端证书密钥文件。
至此,我们准备建立与MySQL服务器的SSL连接。我们只需调用Open方法即可。
Uniconnection1.Open();
最后,我们打开一个查询,该查询实际上是检查我们是否确实与服务器建立了SSL连接。可以通过使用SQL LIKE运算符来完成。
显示状态,如“ Ssl_cipher”;
上面的SQL将向我们显示连接中的活动SSL密码。如果连接不安全,此查询将返回一个空值。否则,将为您提供由证书文件实际定义的安全连接的详细信息。
请注意,CRSSLIOHandler1具有CipherSuite和Protocols 属性,可以在有需要时帮助您打开/关闭它们。默认情况下,几乎所有常用密码都已打开,并且所有协议都已打开。大多数时候,您将不需要修改这些属性。仅作为附加信息,您可以知道SecureBridge具有如此详细的微调功能。
现在,您可以运行Delphi应用程序,查看您是否确实与MySQL服务器建立了SSL连接。就我而言,我得到以下屏幕。
上面的代码首先在ScFileStorage1组件中查找名为“ client-cert ”的证书,如果找到,则从磁盘文件中导入客户端证书密钥文件。
至此,我们准备建立与MySQL服务器的SSL连接。我们只需调用Open方法即可。
Uniconnection1.Open();
最后,我们打开一个查询,该查询实际上是检查我们是否确实与服务器建立了SSL连接。可以通过使用SQL LIKE运算符来完成。
显示状态,如“ Ssl_cipher”;
上面的SQL将向我们显示连接中的活动SSL密码。如果连接不安全,此查询将返回一个空值。否则,将为您提供由证书文件实际定义的安全连接的详细信息。
请注意,CRSSLIOHandler1具有CipherSuite和Protocols 属性,可以在有需要时帮助您打开/关闭它们。默认情况下,几乎所有常用密码都已打开,并且所有协议都已打开。大多数时候,您将不需要修改这些属性。仅作为附加信息,您可以知道SecureBridge具有如此详细的微调功能。
现在,您可以运行Delphi应用程序,查看您是否确实与MySQL服务器建立了SSL连接。就我而言,我得到以下屏幕。
上图中的查询结果告诉我们,我们使用DHE-RSA-AES256-SHA与服务器建立了安全连接。如果由于某种原因我们与服务器建立了常规的普通连接,则value列将为空。这是MySQL识别安全连接的方法。
如果您想知道结果中值列数据的含义的详细信息,则每个破折号分隔一个方法。每种方法的更多详细信息可以在Wikipedia上阅读:DHA,RSA,AES256,SHA。
关于SecureBridge的更多详细信息
SecureBridge是一个允许您仅分发EXE文件的工具。它不依赖于任何外部DLL或软件。这样,您可以轻松地在针对Android或iOS的FMX应用程序中使用它。
SecureBridge允许您不直接从磁盘文件中加载证书文件,而是例如从资源之类的流中加载证书文件。还可以在源代码中包含加密的常量数据。在运行时对其进行解密,并在运行时加载该证书和密钥文件。这种边缘情况很可能是具有自己安全要求的客户的要求。我已经收到了如此出色的案例。
您可以使用TUniConnection.SpecificOptions提供磁盘上的证书文件信息。为此,请执行以下步骤:
将属性CRSSLIOHandler1.Storage设置为nil(删除对象检查器中该属性中写入的内容);
1、UniConnection1.SpecificOptions.Values ['SSLOptions.SSLCACert']:='磁盘文件全名';
2、UniConnection1.SpecificOptions.Values ['SSLOptions.SSLCert']:='磁盘文件全名';
3、UniConnection1.SpecificOptions.Values ['SSLOptions.SSLKey']:='磁盘文件全名';
4、将属性UniConnection1.IOHandler设置为CRSSLIOHandler1;
5、将属性CRSSLIOHandler1.Storage设置为nil(删除对象检查器中该属性中写入的内容);
6、将属性CRSSLIOHandler1.CACertName设置为nil(删除对象检查器中该属性中写入的内容);
7、将属性CRSSLIOHandler1.CertName设置为nil(删除在对象检查器中该属性中写入的内容)。
立即下载UniDAC 的30天免费试用版
了解更多产品信息或想要购买产品正版授权请点击
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢