首页 > 数据库 >揭秘POSTGRESQL中的通信加密

揭秘POSTGRESQL中的通信加密

时间:2023-09-01 23:46:06浏览次数:50  
标签:公钥 加密 证书 密钥 服务器 POSTGRESQL 私钥 揭秘

在这篇文章中,我们想向您简要介绍 TLS(传输层安全性),这是一种广泛与 PostgreSQL 结合使用的技术,用于加密客户端/服务器连接。

什么是 TLS?

TLS 是“传输层安全”的缩写,它是一种确保通过 TCP 连接发送的任何数据免受攻击者保护的方法。

要了解 TLS 的工作原理,您首先需要了解有关加密的一些知识。

对称加密

image

如果您有一个文本“我喜欢奶酪”,并将每个字符替换为英文字母表中的下一个字符(将 a 替换为 b,b 替换为 c,...,z 替换为 a),那么您就拥有了基本的对称加密。您可以将消息“ j mjlf diddtf ”传输给您的朋友,他们可以浏览该消息并将每个字符替换为前一个字符(将 b 替换为 a,将 c 替换为 b,...,将 a 替换为 z),然后他们会知道你最喜欢的零食。

从数学上来说,对称加密可以这样表示:

如果 enc(x, k)=e 是使用密钥 k 将 x 加密为 e 的函数,则使用反函数 enc^-1(e, k)=x 使用 k 将 e 解密回 x 。

这是一个极其简单的例子,很容易破解。有很多更复杂的对称加密数据的方法,除非您知道密钥,否则无法破解。对称加密的一个著名例子是第二次世界大战期间使用的 Enigma 机器。虽然恩尼格玛 (III) 加密在第二次世界大战后期是可以破解的,但更先进的恩尼格玛 (IV) 直到今天仍然难以破解。

对称加密有两个实用性问题

一方面,您需要许多不同的密钥(本质上每个连接一个),因此客户端 B 无法解密服务器发送给客户端 A 的任何内容。另一方面,没有简单的方法可以将密钥本身安全地传递给新客户端。

当您管理两台相互通信的服务器时,这不是问题,因为它们都受到高度信任,并且连接不会经常更改。您的客户(您对其硬件和软件几乎没有控制权)无法得到同等程度的信任,并且可能会定期添加新客户。

因此,为了让客户端能够发送和接收加密消息,您需要一些不同的东西。

非对称加密

image

非对称加密的基础是私钥和公钥的原理,私钥和公钥一起称为密钥对。两者通常都源自同一组随机数,虽然公钥可用于加密数据,但只有私钥可用于再次解密。

这意味着您可以将您的公钥交给任何人,以便他们可以加密他们想要发送给您的内容,并且只有您才能使用私钥对其进行解密。

从数学上来说,非对称加密可以这样表达:

如果 enc(x, k_pub)=e 是使用公钥 k_pub 将 x 加密为 e 的函数,则使用函数 dec(e, k_priv)=x 来解密 e ,使用私钥 k_priv,返回到 x

就像对称加密一样,有些非对称加密的安全性不如其他加密,但我们现在不需要担心这一点。
重要的是我们有一种发送加密数据的方法,而不必信任客户端拥有我们的密钥。

签名验证

非对称加密的另一个好处是它不仅可以用于加密,还可以为数据添加签名。发送者可以计算数据的校验和并使用其私钥对其进行加密以生成签名。接收方计算相同数据的校验和,并将其与发送方的校验和进行比较,后者是使用公钥从签名中解密的。

TLS 是如何工作的?

TLS 使用非对称和对称加密的混合。请记住,对称加密理想情况下每个连接都需要不同的密钥,并且密钥交换很难安全地进行。但与此同时,与非对称加密相比,对称加密更容易计算(即更快、更便宜),并且仍然提供类似的安全性。

因此,非对称加密仅用于初始握手,以派生或交换随机密钥,该随机密钥将用于对称加密连接的其余部分。

有两种创建和交换随机密钥的方法:

  1. 客户端随机生成密钥并使用服务器的公钥对其进行加密。在这种情况下,密码会被加密发送到服务器。
  2. 双方同意一个随机值,并使用该随机值、自己的私钥和另一方的公钥导出共享秘密。此计算可以在两侧完成并产生相同的密码,因此密码本身永远不需要传输。(这称为 Diffie-Hellman 密钥交换)

第二种方法仅在双方都有密钥对时才有用。

当您从计算机访问网站时,通常使用第一种方法,因为您无需拥有密钥对即可访问 HTTPS 加密的网站。

如何使用非对称加密进行身份验证?

如果您已经知道给定服务器的公钥,那么您可以挑战他们以测试它们是否确实具有匹配的私钥。使用已知的公钥,您可以加密随机消息并将其发送到服务器,要求它为您解密。如果已知的公钥与服务器中安装的私钥匹配,那么服务器发回的解密消息也将与您最初加密的随机消息匹配。

这意味着您可以相信服务器是真实的 - 否则,它不应该拥有与您已知的公钥相匹配的私钥。这就是 ssh 文件的工作原理known_hosts

然而,还有另一种方法可以验证对方的身份。当您浏览网页时,您没有互联网上每台服务器的已知公钥列表。
因此,在第一次连接时,服务器会向您发送其公钥。但是您如何确定该密钥实际上属于您期望的服务器呢?毕竟,您可能尝试访问www.myimaginarydomain.com,但攻击者可能会将您的呼叫转移到他们自己的服务器。

这个问题的解决方案很简单:

的操作者www.myimaginarydomain.com可以使用由私钥签名的公钥,该私钥的公钥已安装在您的系统上。这些公钥称为“证书颁发机构”(CA) 证书。但有时情况会更复杂,因为 CA 证书本身几乎从不用于直接签署“最终用户”证书,而是用于签署中间证书,并且可以验证整个链。

例如,证书www.myimaginarydomain.com可能由“Imaginary Corporation CA”签署,该证书可能由“Imaginary Global Trust Corporation”签署。如果“Imaginary Global Trust Corporation”的证书是您的系统或浏览器证书库的一部分,那么服务器传送的证书www.myimaginarydomain.com将受到您的系统的信任。

最后,只有当其他方的地址与证书中包含的地址匹配时,连接才会受到信任。如果www.myimaginarydomain.com使用证书,www.notmyimaginarydomain.com,则不会建立连接。

TLS 领域的术语

虽然很容易将我们刚刚讨论的所有内容视为公钥和私钥对(事实上,除了一点点元数据和签名之外,也仅此而已),但有些术语经常出现在 TLS 上下文中使用。

  • 公钥通常称为“证书”——有服务器证书,可用于识别服务器并向其发送加密消息,也有客户端证书,可用于执行相同的操作,但所有内容都可以使用朝着客户的方向前进。
  • TLS 上下文中的私钥通常简称为“密钥”。
  • 签署其他证书的实体(公司或个人)称为证书颁发机构 (CA);如果您信任此 CA,则可以信任他们签署的证书。
  • 属于 CA 用来签署其他证书的私钥的公钥称为 CA 证书。
  • 为了让证书由 CA 签署,用户创建一个密钥和一个证书签名请求 (CSR) – CSR 包含公钥以及该证书应使用的域名或 IP 地址。
  • 将使用该证书的服务器的域名或 IP 地址包含在证书的公用名 (CN) 字段中。对于客户端证书,CN 通常包含用户名。

标签:公钥,加密,证书,密钥,服务器,POSTGRESQL,私钥,揭秘
From: https://www.cnblogs.com/jl1771/p/17673056.html

相关文章

  • TCP KEEPALIVE以获得更好的POSTGRESQL体验进程
    如果您听说过TCPkeepalive但不确定它是什么,请继续阅读。如果您曾经对以下错误消息感到惊讶:serverclosedtheconnectionunexpectedlySSLSYSCALLerror:EOFdetectedunexpectedEOFonclientconnectioncouldnotreceivedatafromclient:Connectionresetbypeer......
  • postgresql流复制一(环境搭建)
    PostgreSQL早在9.0版本开始支持物理复制,也可称为流复制(StreamingReplication),通过流复制技术,可以从实例级复制出一个与主库一模一样的从库(也称之为备库)举个简单的例子,在主机host1上创建了一个PostgreSQL实例,并在实例上创建多个数据库,通过流复制技术可以在另外一台主机ho......
  • postgresql流复制三(延迟备库)
    延迟备库是指可以配置备库和主库的延迟时间,这样备库始终和主库保持指定时间的延迟,例如设置备库和主库之间的延迟时间为1小时,理论上备库和主库的延时始终保持在一小时左右。延迟备库1延迟备库的意义PostgreSQL流复制环境下,如果主库不是很忙并且备库硬件资源充分,通常备库和主......
  • postgresql流复制四(查询冲突)
    部署流复制环境后,备库可提供只读操作,通常会将一些执行时间较长的分析任务、统计SQL跑在备库上,从而减轻主库压力,在备库上执行一些长时间SQL时,可能会出现以下错误并被中止:FATAL:terminatingconnectionduetoconflictwithrecoveryDETAIL:Userwasholdingarelation......
  • POSTGRESQL中从MD5到SCRAM-SHA-256
    从v10开始,PostgreSQL提供了scram-sha-256对密码哈希和身份验证的支持。本文介绍了如何安全地调整您的应用程序。为什么我们需要scram-sha-256?PostgreSQL使用哈希加密有两个目的:实际的数据库密码是用户输入的明文密码的哈希值。这可以防止小偷在其他系统上使用偷来的密码。......
  • 关于Azure-磁盘加密集-Disk Encryption Set-的创建与说明
    在Azure中如果要使用自己的key加密磁盘,那么就得先创建一个密钥保管库,并生成密钥但是创建磁盘时,还是无法直接使用密钥保管库中的Key,先得有一个中间的产品,叫磁盘加密集,一个磁盘加密集,只能指定一个密钥保管库中的一个key于是整个过程为 ,1、先有密钥保管库及密钥,2,创建磁盘加密集,......
  • postgresql常用命令
    PostgreSQL是一个强大的开源关系型数据库管理系统,它提供了许多用于管理数据库和执行操作的命令。以下是一些常用的PostgreSQL命令:连接到数据库:psql-hhostname-ddbname-Uusername这个命令用于连接到指定的数据库,需要提供主机名、数据库名和用户名。你可以根据需要修......
  • 揭秘微信过期文件找回:如何轻松找回已过期的珍贵信息
    由于微信的“天才设计”,所以对于微信中的文件而言,只有7天的寿命。但是,微信清理的只是缓存信息,真正的文件、图片或者视频还是保留在你的微信中的,简单操作即可找回!那么,微信显示文件已过期或者被清理怎么找回呢?其实方法不难,下面带大家详细地了解一下操作步骤,每个人都可以学会。1.......
  • pg_dump备份加密
    瀚高数据库目录文档用途详细信息文档用途通常目前备份过程中,备份出的数据都为明文,而在备份数据的传输或者使用过程中,都有可能出现备份数据丢失的情况。在这种情况下,需要对备份出的数据进行加密处理。详细信息1.介绍对于备份时输入的口令,使用SM3加密算法,生成类似SM3***格式的16......
  • Linux安装PostgreSql
    1、准备工作Linux、Centos7、PostgreSql142、安装a>进入PostgreSql下载官网(PostgreSql),选装指定的版本编辑b>依次执行网页中的命令编辑3、设置允许远程连接a>进入data目录[root@localhost~]#cd/var/lib/pgsql/14/datab>修改postgresql.conf文件[root@localhostdata]#vimpo......