所以,我一直在阅读有关桌面应用程序和数据库服务器的安全性。以前,当我构建链接到数据库的应用程序时,我采用了简单的路径,只是直接在源代码中存储硬编码的连接字符串。这是有效的,因为二进制文件没有分发给第三方。但是,现在我正在开发一个二进制文件被第三方使用的项目,在这种情况下,与服务器的通信成为我需要处理的安全问题。
由于优先级是没有从客户端计算机直接连接到远程数据库,我理解服务器/客户端数据库服务是一个不错的选择。在这种情况下,客户端计算机使用TCP将请求发送到服务器,然后服务器使用存储过程处理请求并相应地响应客户端。
我对此的疑问是:
我。这个设置是一个可取的设置,还是其他设置,我不知道哪种设置更适合我正在进行的项目?
II。如何确保这种连接?我可以使用OpenSSL生成的安全证书轻松建立与服务器的SSL连接,但是我不确定这是否是保护桌面应用程序连接的正确方法,或者此方法是否主要用于HTTPS。一般情况下,一般情况下应该保护连接(有没有这种情况无关紧要,例如,如果我所做的只是来回发送布尔值?)?讨论这些问题的任何好资源?例如,我的Windows PC上安装了大量已联网的应用程序,但我没有看到很多应用程序在我的PC上安装安全证书。是什么给了什么?
完全披露:我是一名C ++(业余爱好者)程序员,使用Boost库满足我的网络编程需求,使用OpenSSL进行SSL加密。但是,我希望在不过多关注这些事实的情况下回答这个问题:)
答案 0 :(得分:1)
数目:
我。让您的应用程序与Web服务进行通信,然后与数据库进行通信是一种更好的设置。这将数据库从客户端抽象出来(因此可以直接从互联网访问)。
II。这取决于您的系统受到的威胁。如果您从上述Web服务中出售的数据是不敏感且不是用户特定的数据(例如,允许搜索公共照片库的应用程序,那么您的Web服务只返回带有URL的结果集)那么您可能只需使用SSL即可。其他应用程序可以通过各种方式安装自己的证书。他们可以从CA获得证书,例如verisign,因此您的计算机已经信任它。或者他们可以使用他们的应用程序的二进制文件部署公共证书,并在他们的应用程序内部处理它(这是一种证书固定形式)。
ii第2部分。如果您需要客户端进行身份验证,出于要求确保不仅任何人可以使用您的Web服务或支持更高级的授权模型的原因,那么您需要实现某种排序认证。这将是一个要解决的更大问题。
答案 1 :(得分:0)
确保使用CA签名的证书,而不是自签名的。您可能还需要考虑服务和数据库之间的相互身份验证。