【发布时间】:2018-09-16 20:59:53
【问题描述】:
我已经阅读了大量有关 SQL Server (2012) 中的非对称密钥和证书的信息,但它们似乎专门用于签署数据。我拥有的是一个 SQL CLR 程序集,我已使用数字证书签名并成功加载为 UNSAFE 程序集并成功执行了 SqlFunction。但是,我想向 SqlFunction 添加逻辑以验证程序集是否由我的证书签名。对于所有其他程序集,我们提取公钥并将其与许可证文件中的密钥进行比较。但是,当程序集在 SQL 内部执行时,似乎没有办法提取公钥。是否有一些我不理解的 SQL CLR 或 CERT/ASK 体系结构以便访问它?蒂亚!
需求说明:
我们销售的软件可以将二进制格式的数据生成到我们的数据库架构中,因此客户无法轻松地直接使用 T-SQL 查询数据。这样做既是为了提高性能,也是为了黑盒我们输出数据的数据分析算法。目前客户必须使用我们的软件通过“BusnLogicCore.dll”“解压”这个 blob 数据。只有当调用程序集已由我们事先批准的证书签名时,此 dll 才会执行。对于购买我们 SDK 的客户,客户向我们发送他们自己证书的公钥。我们将 pk 添加到我们颁发给他们的许可证文件中,以便程序集可以确认他们被允许调用 BusnLogicCore.dll。我们现在正在创建 SQL CLR 函数,该函数将允许客户使用 T-SQL 调用 BusnLogicCore.dll 并将 blob 数据解压缩为查询的一部分。但是,我们无法确认 SQL CLR 函数已由我们批准调用 BusnLogicCore.dll 的证书签名。如果我们在这个逻辑上戳个洞,让SQL CLR函数不用经过这个验证,那么没有购买SDK的客户可以编写自己的SQL CLR函数调用BusnLogicCore.dll。它比这更复杂一点,我们可以对许可证进行额外的检查,但最好不要绕过这个验证。这是一个边缘案例吗?可能,但我们想尽我们所能保护我们的 IP,没有这个选项是令人沮丧的。
更新: 我检查了 sys.certificates 表,但 cert_serial_number 和指纹列都与证书的公钥不匹配。
【问题讨论】:
-
我的帖子上线不到 20 分钟,并且已被否决。你能说一下为什么吗?
-
不知道为什么它被否决了,但我只是投了赞成票。也不知道为什么你甚至想要/需要这样做,因为答案是简单地通过能够首先在 SQL Server 中创建程序集来暗示。不过,我在回答中提供了一些细节。也许您可以更新问题以详细说明确切您要完成的工作;-)
标签: .net sql-server code-signing sqlclr digital-certificate