MongoDB中的加密技术
NoSQL是传统关系型数据库的一种替代方案。在处理大量分布式数据集时,NoSQL数据库相当有用。MongoDB是一个可以管理面向文档的信息、存储或检索信息的工具。
在这篇文章中,我们将通过一些例子来了解MongoDB中的静态加密。
前提条件
要继续学习本教程,读者应该具备以下条件。
-
在你的系统中安装了MongoDB。
-
对MongoDB和它的shell命令有一些初步了解。
在开始介绍MongoDB的静态加密概念之前,我们先讨论一下 "加密 "一词。
什么是加密?
加密是一种保护数据的方式,以便只有授权方或用户能够理解这些信息。换句话说,它是将人类可读的明文转换为不可理解的文本的过程,也被称为密码文本。
什么是密码学中的密钥?
加密密钥是在加密算法中用于改变数据的一串字符,使其看起来是随机的。像物理钥匙一样,它对数据进行加密,只有拥有正确钥匙的人才能解密。
为什么数据加密是必要的?
数据加密是必要的,以下因素是对我们的数据或数据库进行加密的关键原因。
-
隐私:在加密的帮助下,除了预定的各方,没有人可以阅读或干扰你要保护的数据。这可以防止攻击者、网络、互联网服务提供商,以及在某些情况下政府截获和阅读敏感数据。
-
安全性:加密有助于防止数据外泄,无论数据是在你的本地机器还是在互联网上。有许多安全算法可以保护数据、数据库和客户-服务器连接,如公钥和私钥密码学、RSA算法等。几乎每个公司都使用HTTPS协议,并利用这些算法来保护他们的用户免受攻击。像我们这样的用户也需要从我们的角度出发,不要访问未知网站或打开垃圾邮件等。
-
数据完整性:加密也有助于防止恶意行为,如路径上的攻击。当数据在互联网上传输时,加密确保收件人收到的数据没有被篡改或在途中被掺杂,例如中间人攻击。
-
认证:公钥加密和其他加密方法可以用来确定网站的所有者拥有网站TLS/SSL证书中列出的私钥。这使得网站的用户可以确定他们连接到了真正的网站服务器,这就避免了欺骗行为。
什么是加密算法?
加密算法是一种用于将数据转化为密码文本或胡言乱语文本的方法,这种文本非常难以理解,只有当接收者用自己的密钥解密信息时,才能将其转化为原始文本。
所以,现在你对加密有了一个更好的背景,现在让我们深入了解MongoDB中的加密。
在MongoDB中对数据进行加密
如果你选择加密你的数据,MongoDB提供了在运动和静止状态下加密的解决方案。
运动中的加密
所有版本的MongoDB都支持TLS(传输层安全)和SSL(安全套接字层),以通过网络发送和接收数据。TLS和SSL是通常用于保护网站流量和文件共享的加密类型。它们是加密协议,在数据从一个点到另一个点的过程中确保其安全。
休息时的加密
为了对静态数据进行加密,MongoDB企业版在文件级别提供本地的、基于存储的对称密钥加密。整个数据库加密也被称为透明数据加密(TDE)。
MongoDB利用高级加密标准(AES)256位加密算法,这种加密密码使用相同的秘密密钥来加密和解密数据。静态数据AES加密仅在使用所需WiredTiger存储引擎的MongoDB企业版和Atlas版上可用。
MongoDB提供的另一个功能是在 "FIPS模式 "下打开加密的选项,这意味着你在MongoDB中使用的加密将被测试为符合美国国家标准和技术研究所联邦信息处理标准。根据NIST FIPS验证和测试的解决方案是为了满足最高的安全标准和合规性。
MongoDB中的加密性能
当选择加密你的MongoDB数据库时,用户应该考虑性能。性能是一个非常重要的因素,特别是对于那些存储大量数据的开发人员来说,他们每天通过前端应用程序访问这些数据。当银行或零售应用程序每天从数据库中请求数千或数百万条记录时,任何延迟或停机时间都会严重影响业务的连续性和运营。
至于今天的情况,我们希望快速检索数据,如果一个应用程序不能满足这个需求--它根本不被接受。这就是为什么MongoDB使用英特尔至强X5675 CPU进行了性能测试,因此存储引擎的平均延迟在10%-15%之间,这取决于用户向数据库读取或写入的数据量。
当用户只向数据库写入大量数据时,性能影响落在服务器端,然而,在更常见的情况下,用户可能对数据执行只读命令,所以性能可能会下降5%-10%。
MongoDB中的加密密钥管理
加密密钥管理是用来保护和管理你的加密密钥的方法。企业加密密钥管理应符合NIST在特别出版物中建议的密钥管理框架和建议。
MongoDB不包括企业加密密钥管理解决方案,用户必须向第三方密钥管理解决方案提供商购买解决方案。MongoDB企业版使客户能够使用几个经过测试和验证的企业密钥管理合作伙伴来保护加密,这是MongoDB的一个优点。
加密密钥管理是必要的,因为如果没有密钥管理,你就会把保护敏感业务和客户数据的钥匙暴露出来,那么你就会把整个组织暴露在数据丢失或被盗的风险中。今天,通过MongoDB企业版,客户可以通过实施本地加密和部署第三方企业密钥管理解决方案,轻松满足加密和密钥管理的最佳实践。
在继续讨论如何在数据库中实施SSL加密之前,让我们首先了解什么是SSL。
什么是SSL?
SSL是安全套接字层(Secure Sockets Layer)的缩写,它指的是对互联网上的通信进行加密和保护的一种协议。SSL的目的是保护客户端和服务器之间的通信安全,但它也可以保护电子邮件、VoIP、LTE和其他不稳定和不信任的网络上的通信。
现在我们将学习如何在你的MongoDB数据库中添加SSL传输加密。
在MongoDB中实施SSL加密
要做到这一点,你需要在你的MongoDB外壳中输入这个命令。
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
如果你不想用口令保护你的私钥,你也可以添加-notes 。否则,它将提示你 "至少4个字符 "的密码。天数 "参数可以用任何数字代替,以影响过期日期。
然后,它将提示你诸如 "国家名称 "之类的东西,当它询问服务器名称时,添加localhost,或者如果你有自己的主机名,则添加那个,但你可以直接点击回车,接受默认值。
在这个过程之后,你将得到两个文件:mongodB-cert key文件mongodb-cert.crt 文件。我们需要将这两个文件串联成一个,因此你需要执行。
cat mongodb-cert.key mongodb-cert.crt > mongodb.pem
这将在你的磁盘中创建一个名为mongodb.pem 的文件,这就是你需要启用SSL加密的文件。
现在导航到你存储.pem 文件的目录,在那里我们需要通过在命令中使用--sslMode 参数来设置SSL模式,该参数定义了是否启用SSL以及如何配置它。
键入此命令以启用SSL加密,你也必须在你的.pem 文件的地方使用此命令。
键入。
mongod --sslMode requireSSL --sslPEMKeyFile mongodb.pem
这个命令将启动一个没有CA认证文件的SSL服务器,为此你必须从政府那里获得许可证。该服务器将等待连接,现在要连接到该服务器,我们必须将我们的mongodb.pem 文件作为CA证书来完成这个过程,所以在你的终端窗口中打开一个新的标签并输入。
mongodb --ssl --sslCAFile mongodb.pem --host localhost
结语
至此,你已经创建了一个SSL加密连接,在这里你可以创建你的数据库并为其添加安全功能。我希望你现在意识到安全的重要性,不仅仅是在数据库方面,而是在一般情况下。
无论是在生产还是在开发环境中,数据的安全和加密将永远是一个令人关注的话题,所以要认真对待它。