Github/블로그와 동기화된 기사
사람들은 웹 트랜잭션을 사용하여 매우 중요한 일을 처리합니다. 강력한 보안이 보장되지 않으면 사람들은 안심하고 온라인 쇼핑을 하거나 뱅킹을 할 수 없습니다. 회사는 액세스를 엄격하게 제한하지 않고는 중요한 문서를 웹 서버에 배치할 수 없습니다. 웹에는 안전한 형태의 HTTP가 필요합니다.
현재 인증 제공
(기본 인증
및 다이제스트 인증
)과 메시지 무결성 검사
(요약 A)가 있습니다. qop="auth-int"에 대한 경량 접근 방식). 이러한 방법은 많은 네트워크 트랜잭션에 적합하지만 대규모 쇼핑, 은행 거래 또는 기밀 데이터 액세스에는 강력하지 않습니다. 이러한 보다 중요한 거래에는 보안을 보장하기 위해 HTTP와 디지털 암호화의 조합이 필요합니다. 提供认证
(基本认证
和 摘要认证
)和报文完整性检查
(摘要 qop="auth-int")的轻量级方法。对很多网络事务来说,这些方法都是很好用的, 但对大规模的购物、银行事务,或者对访问机密数据来说,并不足够强大。这些更 为重要的事务需要将 HTTP 和数字加密技术结合起来使用,才能确保安全。
HTTP 的安全版本要高效、可移植且易于管理,不但能够适应不断变化的情况而且还应 该能满足社会和政府的各项要求。我们需要一种能够提供下列功能的 HTTP 安全技术。
服务器认证 (客户端知道它们是在与真正的而不是伪造的服务器通话)。
客户端认证 (服务器知道它们是在与真正的而不是伪造的客户端通话)。
完整性 (客户端和服务器的数据不会被修改)。
加密 (客户端和服务器的对话是私密的,无需担心被窃听)。
效率 (一个运行的足够快的算法,以便低端的客户端和服务器使用)。
普适性 (基本上所有的客户端和服务器都支持这些协议)。
管理的可扩展性 (在任何地方的任何人都可以立即进行安全通信)。
适应性 (能够支持当前最知名的安全方法)。
在社会上的可行性 (满足社会的政治文化需要)。
在这个数字加密技术的入门介绍中,我们会讨论以下内容。
密钥:改变密码行为的数字化参数。
对称密钥加密系统:编 / 解码使用相同密钥的算法。
不对称密钥加密系统:编 / 解码使用不同密钥的算法。
公开密钥加密系统:一种能够使数百万计算机便捷地发送机密报文的系统。
数字签名:用来验证报文未被伪造或篡改的校验和。
数字证书:由一个可信的组织验证和签发的识别信息。
密码学基于一种名为密码(cipher)
的秘密代码。密码是一套编码方案——一种特 殊的报文编码方式和一种稍后使用的相应解码方式的结合体。加密之前的原始报文通常被称为 明文(plaintext 或 cleartext)
。使用了密码之后的编码报文通常被称作 密文(ciphertext)
。
用密码来生成保密信息已经有数千年了。传说 尤利乌斯·凯撒(Julius Caesar)
曾使用过一种三字符循环移位密码,报文中的每个字符都由字母表中三个位置之后的字符来取代。在现代的字母表中,“A”就应该由“D”来取代,“B”就应该由“E” 来取代,以此类推。
随着技术的进步,人们开始制造一些机器,这些机器可以用复杂得多的密码来快速、 精确地对报文进行编解码。这些密码机不仅能做一些简单的旋转,它们还可以替换 字符、改变字符顺序,将报文切片切块,使代码的破解更加困难。
往往在现实中,编码算法和编码机都可能会落入敌人的手中,所以大部分机器上都有一些号盘,可以将其设置为大量不同的值以改变密码的工作方式。即使机器被盗,没有正确的号盘设置(密钥值),解码器也无法工作。
这些密码参数被称为 密钥(key)
암호
라는 비밀 코드를 기반으로 합니다. 암호는 메시지를 인코딩하는 특정 방식과 나중에 이를 디코딩하는 해당 방식의 조합인 인코딩 방식입니다. 암호화 전 원본 메시지를 일반적으로 일반 텍스트(일반 텍스트 또는 일반 텍스트)
라고 합니다. 비밀번호를 사용한 후 인코딩된 메시지를 일반적으로 암호문
이라고 합니다. 🎜🎜비밀번호는 수천년 동안 기밀 정보를 생성하는 데 사용되었습니다. 전설에 따르면 Julius Caesar
는 메시지의 각 문자를 알파벳의 세 자리 뒤에 있는 문자로 바꾸는 3자리 순환 시프트 암호를 사용했습니다. 현대 알파벳에서는 "A"가 "D"로, "B"가 "E"로 대체됩니다. 🎜키
라고 합니다. 암호 해독 프로세스를 올바르게 진행하려면 올바른 키를 암호화 시스템에 입력해야 합니다. 암호화 키를 사용하면 암호화 시스템이 여러 개의 가상 암호화 시스템처럼 나타나며, 각각은 서로 다른 키 값을 갖고 그에 따라 동작도 달라집니다. 🎜🎜일반 텍스트 메시지 P, 인코딩 함수 E 및 디지털 인코딩 키 e가 주어지면 인코딩된 암호문 C가 생성될 수 있습니다. 복호화 함수 D와 복호화 키 d를 통해 암호문 C를 원래의 평문 P로 복호화할 수 있다. 물론, 인코딩/디코딩 기능은 서로 역기능입니다. P의 인코딩을 디코딩하면 원래 메시지 P로 돌아갑니다. 🎜🎜🎜🎜🎜🎜많은 디지털 암호화 알고리즘은 인코딩과 디코딩 시 동일한 키 값(e=d)을 사용하기 때문에 대칭 키
암호화 기술이라고 합니다. 우리는 이들을 집합적으로 키 k라고 부르겠습니다. 对称密钥(symmetric-key)
加密技术,这是因为它们在编码时使用的密钥值和解码时 一样(e=d)。我们就将其统称为密钥 k。
流行的对称密钥加密算法包括:DES
、Triple-DES
、RC2
和 RC4
。
保持密钥的机密状态是很重要的。在很多情况下,编 / 解码算法都是众所周知的,因此密钥就是唯一保密的东西了。好的加密算法会迫使攻击者试遍每一个可能的密钥,才能破解代码。用暴力去尝试 所有的密钥值称为 枚举攻击(enumeration attack)
。
对称密钥加密技术
的缺点之一就是发送者和接收者在互相对话之前,一定要有一个共享的保密密钥。
比如 Alice(A)、Bob(B)和 Chris(C)都想与 Joe 的 五金商店(J) 对话。A、B 和 C 都要建立自己与 J 之间的保密密钥。A 可能需要密钥 KAJ,B 可能需要密钥 KBJ,C 可能需要密钥 KCJ。每对通信实体都需要自己的私有密钥。如果有 N 个节点, 每个节点都要和其他所有 N-1 个节点进行安全对话,总共大概会有 N2 个保密密钥: 这将是一个管理噩梦。
公开密钥加密技术没有为每对主机使用单独的加密 / 解密密钥,而是使用了两个非对称密钥
:一个用来对主机报文编码,另一个用来对主机报文解码。
所有公开密钥非对称加密系统所面临的共同挑战是,要确保即便有人拥有了下面所有的线索,也无法计算出保密的私有密钥:
公开密钥 (是公有的,所有人都可以获得);
一小片拦截下来的密文 (可通过对网络的嗅探获取);
一条报文及与之相关的密文 (对任意一段文本运行加密器就可以得到)。
RSA算法 就是一个满足了所有这些条件的流行的公开密钥加密系统,它是在 MIT 发明的,后来由 RSA 数据安全公司将其商业化。即使有了公共密钥、任意一段明文、用公共密钥对明文编码之后得到的相关密文、RSA 算法自身,甚至 RSA 实现 的源代码,破解代码找到相应的私有密钥的难度仍相当于对一个极大的数进行质因数分解的困难程度,这种计算被认为是所有计算机科学中最难的问题之一。因此, 如果你发现了一种能够快速地将一个极大的数字分解为质因数的方法,就不仅能够入侵瑞士银行的账户系统,而且还可以获得图灵奖了。
任何人只要知道了其公开密钥,就可以向一台公共服务器发送安全报文,所以非对称的公开密钥加密系统是很好用的。两个节点无须为了进行安全的通信而先交换私有密钥。
但公开密钥加密算法的计算可能会很慢。实际上它混合使用了对称和非对称策略。 比如,比较常见的做法是在两节点间通过便捷的公开密钥加密技术建立起安全通信, 然后再用那条安全的通道产生并发送临时的随机对称密钥,通过更快的对称加密技 术对其余的数据进行加密。(SSH和HTTPS都是这样的)
除了加 / 解密报文之外,还可以用加密系统对报文进行签名(sign)
,以说明是谁编写的报文,同时证明报文未被篡改过。这种技术被称为数字签名(digital signing)
。
数字签名是附加在报文上的特殊加密校验码。数字签名通常是用 非对称公开密钥
인기 있는 대칭 키 암호화 알고리즘은 다음과 같습니다.DES
, Triple-DES
, RC2
및 RC4
.
키를 기밀로 유지하는 것이 중요합니다. 많은 경우 인코딩/디코딩 알고리즘은 잘 알려져 있으므로 비밀로 유지되는 유일한 것은 키뿐입니다. 좋은 암호화 알고리즘은 공격자가 코드를 해독하기 전에 가능한 모든 키를 시도하도록 합니다. 모든 키 값을 시도하기 위해 무차별 공격을 사용하는 것을 열거 공격
이라고 합니다. 단점
대칭 키 암호화 기술
의 단점 중 하나는 송신자와 수신자가 서로 대화하기 전에 를 가지고 있어야 한다는 것입니다. 예를 들어 Alice(A), Bob(B) 및 Chris(C)는 모두 Joe의 철물점(J)과 대화하고 싶어합니다. A, B, C는 모두 자신과 J 사이에 비밀 키를 설정해야 합니다. A에는 KAJ 키가 필요할 수 있고, B에는 KBJ 키가 필요할 수 있으며, C에는 KCJ 키가 필요할 수 있습니다. 각 통신 엔터티 쌍에는 자체 개인 키가 필요합니다. N개의 노드가 있는 경우 각 노드는 N-1개의 다른 모든 노드와 안전하게 통신해야 하며 총 N2개의 비밀 키가 있게 됩니다. 이는
관리의 악몽🎜이 될 것입니다. 🎜🎜공개 키 암호화🎜🎜각 호스트 쌍에 별도의 암호화/복호화 키를 사용하는 대신 공개 키 암호화에서는 두 개의비대칭 키
를 사용합니다. 🎜하나는 호스트 메시지 인코딩용이고 다른 하나는 다음 용도로 사용됩니다. 호스트 메시지를 디코딩🎜. 🎜🎜RSA🎜🎜모든 공개 키 비대칭 암호화 시스템이 직면하는 일반적인 과제는 누군가 다음 단서를 모두 가지고 있더라도 비밀 개인 키를 계산할 수 없도록 하는 것입니다. 🎜서명
할 수도 있습니다. 메시지가 변조되지 않았다는 것입니다. 이 기술을 디지털 서명
이라고 합니다. 🎜🎜🎜디지털 서명은 메시지🎜에 첨부된 특수 암호화된 인증 코드입니다. 디지털 서명은 일반적으로 비대칭 공개 키
기술을 사용하여 생성됩니다. 개인키는 소유자만이 알고 있기 때문에 작성자의 개인키는 일종의 '지문'으로 활용될 수 있다. 🎜🎜🎜🎜🎜🎜🎜🎜 RSA 암호화 시스템은 D가 이미 개인 키를 입력으로 사용했기 때문에 디코딩 기능 D를 서명 기능으로 사용합니다. 디코드 기능은 단순한 기능이므로 어떤 입력에도 사용할 수 있습니다. 마찬가지로 RSA 암호화 시스템에서는 D와 E 기능이 어떤 순서로든 적용되면 서로 상쇄됩니다. 따라서 D(E(stuff)) = stuff와 마찬가지로 E(D(stuff)) = stuff입니다. 🎜🎜🎜참고🎜🎜🎜개인 키와 공개 키는 한 쌍이므로 둘 다 암호화 및 복호화하여 쌍으로 사용할 수 있습니다🎜. RSA의 원리는 두 개의 큰 소수(p, q)의 곱(n)은 역으로 풀기가 어렵기 때문에 pq가 동등하고, 공개키와 개인키도 동등하다는 것이다. 🎜개인키 암호화와 공개키 복호화는 "개인키 소유자"의 고유한 신원을 증명할 수 있으며 서명에 사용됩니다.
공개 키 암호화 및 개인 키 복호화를 통해 전송된 정보는 "개인 키 소유자"만 복호화할 수 있습니다(개인 키를 사용하여 데이터를 암호화하고 전송하는 경우 공개 키 보유자가 복호화함) (보유자가 많을 수 있음) 누군가) 암호를 해독하여 정보 보호를 상실함)
인터넷의 "신분증" - 디지털 인증서. 디지털 인증서(종종 "인증서"라고도 하며 인증서 발급과 비슷함)
에는 신뢰할 수 있는 조직이 보증하는 사용자 또는 회사에 대한 정보가 포함되어 있습니다. 数字证书(通常被称作“certs”,有点像 certs 牌薄荷糖)
中包含了由某个受信任组织担保的用户或公司的相关信息。
数字证书中还包含一组信息,所有这些信息都是由一个官方的 证书颁发机构(CA)
以数字方式签发的。
而且,数字证书通常还包括对象的公开密钥,以及对象和所用签名算法的描述性信息。任何人都可以创建一个数字证书,但并不是所有人都能够获得受人尊敬的签发 权,从而为证书信息担保,并用其私有密钥签发证书。典型的证书结构如图所示。
不幸的是,数字证书没有单一的全球标准。就像不是所有印刷版 ID 卡都在同样的位 置包含了同样的信息一样,数字证书也有很多略有不同的形式。 不过好消息就是现 在使用的大多数证书都以一种标准格式—— X.509 v3
,来存储它们的信息。X.509 v3 证书提供了一种标准的方式,将证书信息规范至一些可解析字段中。不同类型的证 书有不同的字段值,但大部分都遵循X.509 v3结构。
基于 X.509 证书的签名有好几种,(其中)包括 Web 服务器证书、客户端电子邮件 证书、软件代码签名证书和证书颁发机构证书。
通过 HTTPS 建立了一个安全 Web 事务之后,现代的浏览器都会自动获取所连接服 务器的数字证书。如果服务器没有证书,安全连接就会失败。
浏览器收到证书时会对签名颁发机构进行检查。如果这个机构是个很有权威的公共签名机构,浏览器可能已经知道其公开密钥了(浏览器会预先安装很多签名颁发机构的证书)。
如果对签名颁发机构一无所知,浏览器就无法确定是否应该信任这个签名颁发机构, 它通常会向用户显示一个对话框,看看他是否相信这个签名发布者。签名发布者可 能是本地的 IT 部门或软件厂商。
HTTPS 是最流行的 HTTP 安全形式。它是由网景公司首创的,所有主要的浏览器和 服务器都支持此协议。
使用 HTTPS 时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。 HTTPS 在 HTTP 下面提供了一个传输级的密码安全层——可以使用 SSL,也可以使用其后继者—— 传输层安全(Transport Layer Security,TLS)
。由于 SSL 和 TLS 非常类似,所以我们不太严格地用术语 SSL 来表示 SSL 和 TLS。
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
窃听风险(eavesdropping)
:第三方可以获知通信内容。
篡改风险(tampering)
:第三方可以修改通信内容。
冒充风险(pretending)
:第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
所有信息都是加密传播,第三方无法窃听。
具有校验机制,一旦被篡改,通信双方会立刻发现。
配备身份证书,防止身份被冒充。
SSL(Secure Socket Layer)是安全套接层
,TLS(Transport Layer Security)是传输层安全协议
인증 기관(CA)
에서 디지털 방식으로 발급됩니다. 또한 디지털 인증서에는 일반적으로 객체의 공개 키는 물론 객체에 대한 설명 정보와 사용된 서명 알고리즘도 포함됩니다. 누구나 디지털 인증서를 만들 수 있지만 모든 사람이 인증서 정보를 보증하고 개인 키로 인증서를 발급할 수 있는 발급 권한을 갖고 있는 것은 아닙니다. 일반적인 인증서 구조가 그림에 나와 있습니다.
x.509 V3 인증서는 디지털 인증서에 대한 단일 글로벌 표준은 없습니다. 인쇄된 모든 ID 카드가 동일한 장소에 동일한 정보를 담고 있는 것은 아닌 것처럼, 디지털 인증서도 약간씩 다른 형태로 제공됩니다. 하지만 좋은 소식은 오늘날 사용되는 대부분의 인증서가 정보를 표준 형식인 X.509 v3
로 저장한다는 것입니다. X.509 v3 인증서는 인증서 정보를 구문 분석 가능한 여러 필드로 공식화하는 표준 방법을 제공합니다. 인증서 유형에 따라 필드 값이 다르지만 대부분은 X.509 v3 구조를 따릅니다.
TLS(전송 계층 보안)
를 사용하여 전송 수준 암호화 보안 계층을 제공합니다. SSL과 TLS는 매우 유사하므로 SSL과 TLS를 모두 지칭하기 위해 SSL이라는 용어를 덜 엄격하게 사용합니다. 🎜🎜🎜🎜🎜🎜SSL/TLS🎜🎜SSL/TLS를 사용하지 마세요 HTTP 통신은 암호화되지 않은 통신입니다. 일반 텍스트로 분산된 모든 정보는 세 가지 주요 위험을 초래합니다. 🎜도청 위험(도청)
: 제3자가 통신 내용을 알 수 있습니다. 🎜🎜🎜🎜위조
: 제3자가 통신 내용을 수정할 수 있습니다. 🎜🎜🎜🎜가장
: 제3자가 통신에 참여하기 위해 다른 사람인 것처럼 가장할 수 있습니다. 🎜🎜SSL(Secure Socket Layer)은 보안 소켓 계층입니다
, TLS(Transport Layer Security)는 전송 계층 보안 프로토콜
이며 SSL3을 기반으로 구축되었습니다. .0 프로토콜 사양은 SSL3.0의 후속 버전입니다. SSL은 버전 3.0까지 대규모로 배포 및 적용되지 않았습니다. TLS 버전과 SSL의 명백한 차이점은 다양한 암호화 알고리즘을 지원한다는 것입니다. 현재 사용되는 최신 프로토콜은 TLS1.2 프로토콜입니다. 버전 1.3은 아직 초안 단계에 있습니다. 🎜🎜🎜🎜🎜🎜🎜 HTTPS 체계 🎜🎜보안 HTTP는 이제 선택 사항입니다. 웹 리소스에서 트랜잭션을 수행하도록 클라이언트(예: 웹 브라우저)에 요청할 때 URL 구성표를 확인합니다. 🎜URL 구성표가 http인 경우 클라이언트는 서버 포트 80(기본값)에 대한 연결을 열고 이전 HTTP 명령을 보냅니다.
URL 구성표가 https인 경우 클라이언트는 기본적으로 서버 포트 443에 대한 연결을 연 다음 서버와 "핸드셰이크"하고 일부 SSL 보안 매개변수를 서버와 바이너리 형식으로 교환한 다음 암호화를 첨부합니다. HTTP 명령.
SSL은 HTTP와 완전히 다른 바이너리 프로토콜이며 해당 트래픽은 다른 포트를 통해 전달됩니다(SSL은 일반적으로 포트 443을 통해 전달됩니다). SSL과 HTTP 트래픽이 모두 포트 80에 도착하면 대부분의 웹 서버는 바이너리 SSL 트래픽을 잘못된 HTTP로 해석하고 연결을 닫습니다. 보안 서비스를 HTTP 계층에 추가로 통합하면 여러 대상 포트를 사용할 필요가 없어져 실제로는 심각한 문제가 발생하지 않습니다.
암호화된 통신을 시작하기 전에 클라이언트와 서버는 먼저 연결을 설정하고 매개변수를 교환해야 합니다. 이 프로세스를 핸드셰이크라고 합니다. 클라이언트가 Alice이고 서버가 Bob이라고 가정하면 전체 핸드셰이크 프로세스는 다음 그림과 같이 설명할 수 있습니다.
핸드셰이크 단계는 5단계로 나뉩니다.
Alice는 프로토콜 버전 번호, 클라이언트에서 생성된 임의 번호(클라이언트 임의)
및 지원되는 암호화를 제공합니다. 클라이언트 방법. 随机数(Client random)
,以及客户端支持的加密方法。
鲍勃确认双方使用的加密方法,并给出数字证书、以及一个 服务器生成的随机数(Server random)
。
爱丽丝确认数字证书有效,然后生成一个新的 随机数(Premaster secret)
,并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret
)。
爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成 对话密钥(session key)
,用来加密接下来的整个对话过程。
上面的五步,画成一张图,就是下面这样:
握手阶段有三点需要注意:
生成对话密钥一共需要三个随机数。
握手之后的对话使用 对话密钥(session key)
加密(对称加密),服务器的公钥和私钥只用于加密和解密 对话密钥(session key)
(非对称加密),无其他作用。
服务器公钥放在服务器的数字证书之中。
整个握手阶段都不加密(也没法加密),都是明文的。因此,如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于 第三个随机数(Premaster secret)
能不能被破解。
虽然理论上,只要服务器的公钥足够长(比如2048位),那么 Premaster secret
可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的 RSA算法,改为 Diffie-Hellman算法(简称DH算法)。
采用 DH算法
后,Premaster secret
不需要传递,双方只要交换各自的参数,就可以算出这个随机数。
上图中,第三步和第四步由传递 Premaster secret
变成了传递 DH算法
所需的参数,然后双方各自算出 Premaster secret
。这样就提高了安全性。
SSL 支持双向认证,将服务器证书承载回客户端,再将客户端的证书回送给服务器。 而现在,浏览时并不经常使用客户端证书。大部分用户甚至都没有自己的客户端证书。服务器可以要求使用客户端证书,但实际中很少出现这种情况。
SSL 自身不要求用户检查 Web 服务器证书,但大部分现代浏览器都会对证书进行简 单的完整性检查,并为用户提供进行进一步彻查的手段。网景公司提出的一种 Web 服务器证书有效性算法是大部分浏览器有效性验证技术的基础。验证步骤如下所述:
日期检测
서버에서 생성된 난수(Server Random)
를 제공했습니다. 🎜🎜🎜🎜Alice는 디지털 인증서가 유효한지 확인한 다음 새로운 난수(Premaster secret)
를 생성하고 디지털 인증서의 공개 키를 사용하여 난수를 암호화한 후 Bob에게 보냅니다. . 🎜🎜🎜🎜Bob은 자신의 개인 키를 사용하여 Alice가 보낸 난수(예: Premaster secret
)를 얻습니다. 🎜🎜🎜🎜Alice와 Bob은 이전 3개의 난수를 사용하여 합의된 암호화 방법에 따라 세션 키
를 생성하며, 이는 전체 후속 대화 프로세스를 암호화하는 데 사용됩니다. 🎜🎜🎜위의 5단계를 그림으로 표현하면 다음과 같습니다. 🎜🎜🎜🎜🎜🎜핸드셰이크 단계에서 주의해야 할 세 가지 사항은 다음과 같습니다. 🎜🎜🎜🎜대화 키를 생성하려면 총 세 개의 난수가 필요합니다. 🎜🎜🎜🎜핸드셰이크 이후의 대화는 세션 키
를 사용하여 암호화(대칭 암호화)됩니다. 서버의 공개 키와 개인 키는 세션 키)(비대칭 암호화)는 다른 효과가 없습니다. 🎜🎜🎜🎜서버 공개 키는 서버의 디지털 인증서에 저장되어 있습니다. 🎜🎜🎜DH 알고리즘의 핸드셰이크 단계🎜🎜전체 핸드셰이크 단계는 암호화되지 않으며(암호화할 수 없음) 모두 일반 텍스트입니다. 따라서 누군가가 통신을 도청하면 양측이 선택한 암호화 방법은 물론 3개의 난수 중 2개를 알 수 있습니다. 전체 통화의 보안은 <code>세번째 난수(프리마스터 비밀번호)
를 크랙할 수 있는지 여부에만 달려 있습니다. 🎜🎜이론적으로는 서버의 공개 키가 충분히 길면(예: 2048비트) Premaster secret
이 해독되지 않도록 보장할 수 있습니다. 하지만 충분히 보안을 유지하기 위해 핸드오버 단계에서 알고리즘을 기본 RSA 알고리즘에서 Diffie-Hellman 알고리즘(줄여서 DH 알고리즘)으로 변경하는 것을 고려할 수 있습니다. 🎜🎜DH 알고리즘
을 사용한 후에는 Premaster 비밀
을 전달할 필요가 없습니다. 두 당사자는 난수를 계산하기 위해 각자의 매개변수만 교환하면 됩니다. 🎜🎜🎜🎜🎜🎜위 사진에서 3,4단계부터 프리마스터 비밀
을 DH 알고리즘
에 필요한 매개변수에 전달하면 양 당사자가 별도로 프리마스터 비밀
을 계산합니다. 이렇게 하면 보안이 향상됩니다. 🎜🎜서버 인증서🎜🎜SSL은 서버 인증서를 클라이언트로 다시 전달한 다음 클라이언트의 인증서를 다시 서버로 보내는 양방향 인증을 지원합니다. 요즘에는 탐색할 때 클라이언트 인증서가 자주 사용되지 않습니다. 대부분의 사용자는 자신의 클라이언트 인증서조차 갖고 있지 않습니다. 서버는 클라이언트 인증서를 요구할 수 있지만 실제로는 그런 경우가 거의 없습니다. 🎜🎜사이트 인증서 유효성🎜🎜SSL 자체에서는 사용자에게 웹 서버 인증서 확인을 요구하지 않지만, 대부분의 최신 브라우저는 인증서에 대해 간단한 무결성 확인을 수행하고 사용자에게 추가 조사를 수행할 수 있는 수단을 제공합니다. Netscape에서 제안한 웹 서버 인증서 유효성 알고리즘은 대부분의 브라우저 유효성 확인 기술의 기초입니다. 확인 단계는 아래에 설명되어 있습니다. 🎜🎜🎜🎜날짜 감지
먼저 브라우저는 인증서의 시작 날짜와 종료 날짜를 확인하여 인증서가 여전히 유효한지 확인합니다. 인증서가 만료되었거나 활성화되지 않은 경우 인증서 유효성 확인이 실패하고 브라우저에 오류 메시지가 표시됩니다. 🎜
签名颁发者可信度检测
每个证书都是由某些 证书颁发机构(CA)
签发的,它们负责为服务器担保。证书有不同的等级,每种证书都要求不同级别的背景验证。比如,如果申请某个电 子商务服务器证书,通常需要提供一个营业的合法证明。
任何人都可以生成证书,但有些 CA 是非常著名的组织,它们通过非常清晰的流 程来验证证书申请人的身份及商业行为的合法性。因此,浏览器会附带一个签名颁发机构的受信列表。如果浏览器收到了某未知(可能是恶意的)颁发机构签发的证书,那它通常会显示一条警告信息。
签名检测
一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥, 并将其与校验码进行比较,以查看证书的完整性。
站点身份检测
为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着 去验证证书中的域名与它们所对话的服务器的域名是否匹配。服务器证书中通常 都包含一个域名,但有些 CA 会为一组或一群服务器创建一些包含了服务器名称 列表或通配域名的证书。如果主机名与证书中的标识符不匹配,面向用户的客户 端要么就去通知用户,要么就以表示证书不正确的差错报文来终止连接。
SSL 是个复杂的二进制协议。除非你是密码专家,否则就不应该直接发送原始的 SSL 流量。幸运的是,借助一些商业或开源的库,编写 SSL 客户端和服务器并不十 分困难。
OpenSSL 是 SSL 和 TLS 最常见的开源实现。OpenSSL 项目由一些志愿者合作开发, 目标是开发一个强壮的、具有完备功能的商业级工具集,以实现 SSL 和 TLS 协议以 及一个全功能的通用加密库。可以从 http://www.openssl.org 上获得 OpenSSL 的相 关信息,并下载相应软件。
强烈推荐一本书:HTTP 权威指南
超详解析 | CDN HTTPS优化实践,全网一分钟生效
图解SSL/TLS协议
HTTP 权威指南
Github/블로그와 동기화된 기사
사람들은 웹 트랜잭션을 사용하여 매우 중요한 일을 처리합니다. 강력한 보안이 보장되지 않으면 사람들은 안심하고 온라인 쇼핑을 하거나 뱅킹을 할 수 없습니다. 회사는 액세스를 엄격하게 제한하지 않고는 중요한 문서를 웹 서버에 배치할 수 없습니다. 웹에는 안전한 형태의 HTTP가 필요합니다.
현재 인증 제공
(기본 인증
및 다이제스트 인증
)과 메시지 무결성 검사
(요약 A)가 있습니다. qop="auth-int"에 대한 경량 접근 방식). 이러한 방법은 많은 네트워크 트랜잭션에 적합하지만 대규모 쇼핑, 은행 거래 또는 기밀 데이터 액세스에는 강력하지 않습니다. 이러한 보다 중요한 거래에는 보안을 보장하기 위해 HTTP와 디지털 암호화의 조합이 필요합니다. 提供认证
(基本认证
和 摘要认证
)和报文完整性检查
(摘要 qop="auth-int")的轻量级方法。对很多网络事务来说,这些方法都是很好用的, 但对大规模的购物、银行事务,或者对访问机密数据来说,并不足够强大。这些更 为重要的事务需要将 HTTP 和数字加密技术结合起来使用,才能确保安全。
HTTP 的安全版本要高效、可移植且易于管理,不但能够适应不断变化的情况而且还应 该能满足社会和政府的各项要求。我们需要一种能够提供下列功能的 HTTP 安全技术。
服务器认证 (客户端知道它们是在与真正的而不是伪造的服务器通话)。
客户端认证 (服务器知道它们是在与真正的而不是伪造的客户端通话)。
完整性 (客户端和服务器的数据不会被修改)。
加密 (客户端和服务器的对话是私密的,无需担心被窃听)。
效率 (一个运行的足够快的算法,以便低端的客户端和服务器使用)。
普适性 (基本上所有的客户端和服务器都支持这些协议)。
管理的可扩展性 (在任何地方的任何人都可以立即进行安全通信)。
适应性 (能够支持当前最知名的安全方法)。
在社会上的可行性 (满足社会的政治文化需要)。
在这个数字加密技术的入门介绍中,我们会讨论以下内容。
密钥:改变密码行为的数字化参数。
对称密钥加密系统:编 / 解码使用相同密钥的算法。
不对称密钥加密系统:编 / 解码使用不同密钥的算法。
公开密钥加密系统:一种能够使数百万计算机便捷地发送机密报文的系统。
数字签名:用来验证报文未被伪造或篡改的校验和。
数字证书:由一个可信的组织验证和签发的识别信息。
密码学基于一种名为密码(cipher)
的秘密代码。密码是一套编码方案——一种特 殊的报文编码方式和一种稍后使用的相应解码方式的结合体。加密之前的原始报文通常被称为 明文(plaintext 或 cleartext)
。使用了密码之后的编码报文通常被称作 密文(ciphertext)
。
用密码来生成保密信息已经有数千年了。传说 尤利乌斯·凯撒(Julius Caesar)
曾使用过一种三字符循环移位密码,报文中的每个字符都由字母表中三个位置之后的字符来取代。在现代的字母表中,“A”就应该由“D”来取代,“B”就应该由“E” 来取代,以此类推。
随着技术的进步,人们开始制造一些机器,这些机器可以用复杂得多的密码来快速、 精确地对报文进行编解码。这些密码机不仅能做一些简单的旋转,它们还可以替换 字符、改变字符顺序,将报文切片切块,使代码的破解更加困难。
往往在现实中,编码算法和编码机都可能会落入敌人的手中,所以大部分机器上都有一些号盘,可以将其设置为大量不同的值以改变密码的工作方式。即使机器被盗,没有正确的号盘设置(密钥值),解码器也无法工作。
这些密码参数被称为 密钥(key)
암호
라는 비밀 코드를 기반으로 합니다. 암호는 메시지를 인코딩하는 특정 방식과 나중에 이를 디코딩하는 해당 방식의 조합인 인코딩 방식입니다. 암호화 전 원본 메시지를 일반적으로 일반 텍스트(일반 텍스트 또는 일반 텍스트)
라고 합니다. 비밀번호를 사용한 후 인코딩된 메시지를 일반적으로 암호문
이라고 합니다. 🎜🎜비밀번호는 수천년 동안 기밀 정보를 생성하는 데 사용되었습니다. 전설에 따르면 Julius Caesar
는 메시지의 각 문자를 알파벳의 세 자리 뒤에 있는 문자로 바꾸는 3자리 순환 시프트 암호를 사용했습니다. 현대 알파벳에서는 "A"가 "D"로, "B"가 "E"로 대체됩니다. 🎜키
라고 합니다. 암호 해독 프로세스를 올바르게 진행하려면 올바른 키를 암호화 시스템에 입력해야 합니다. 암호화 키를 사용하면 암호화 시스템이 여러 개의 가상 암호화 시스템처럼 나타나며, 각각은 서로 다른 키 값을 갖고 그에 따라 동작도 달라집니다. 🎜🎜일반 텍스트 메시지 P, 인코딩 함수 E 및 디지털 인코딩 키 e가 주어지면 인코딩된 암호문 C가 생성될 수 있습니다. 복호화 함수 D와 복호화 키 d를 통해 암호문 C를 원래의 평문 P로 복호화할 수 있다. 물론, 인코딩/디코딩 기능은 서로 역기능입니다. P의 인코딩을 디코딩하면 원래 메시지 P로 돌아갑니다. 🎜🎜🎜🎜🎜🎜많은 디지털 암호화 알고리즘은 인코딩과 디코딩 시 동일한 키 값(e=d)을 사용하기 때문에 대칭 키
암호화 기술이라고 합니다. 우리는 이들을 집합적으로 키 k라고 부르겠습니다. 对称密钥(symmetric-key)
加密技术,这是因为它们在编码时使用的密钥值和解码时 一样(e=d)。我们就将其统称为密钥 k。
流行的对称密钥加密算法包括:DES
、Triple-DES
、RC2
和 RC4
。
保持密钥的机密状态是很重要的。在很多情况下,编 / 解码算法都是众所周知的,因此密钥就是唯一保密的东西了。好的加密算法会迫使攻击者试遍每一个可能的密钥,才能破解代码。用暴力去尝试 所有的密钥值称为 枚举攻击(enumeration attack)
。
对称密钥加密技术
的缺点之一就是发送者和接收者在互相对话之前,一定要有一个共享的保密密钥。
比如 Alice(A)、Bob(B)和 Chris(C)都想与 Joe 的 五金商店(J) 对话。A、B 和 C 都要建立自己与 J 之间的保密密钥。A 可能需要密钥 KAJ,B 可能需要密钥 KBJ,C 可能需要密钥 KCJ。每对通信实体都需要自己的私有密钥。如果有 N 个节点, 每个节点都要和其他所有 N-1 个节点进行安全对话,总共大概会有 N2 个保密密钥: 这将是一个管理噩梦。
公开密钥加密技术没有为每对主机使用单独的加密 / 解密密钥,而是使用了两个非对称密钥
:一个用来对主机报文编码,另一个用来对主机报文解码。
所有公开密钥非对称加密系统所面临的共同挑战是,要确保即便有人拥有了下面所有的线索,也无法计算出保密的私有密钥:
公开密钥 (是公有的,所有人都可以获得);
一小片拦截下来的密文 (可通过对网络的嗅探获取);
一条报文及与之相关的密文 (对任意一段文本运行加密器就可以得到)。
RSA算法 就是一个满足了所有这些条件的流行的公开密钥加密系统,它是在 MIT 发明的,后来由 RSA 数据安全公司将其商业化。即使有了公共密钥、任意一段明文、用公共密钥对明文编码之后得到的相关密文、RSA 算法自身,甚至 RSA 实现 的源代码,破解代码找到相应的私有密钥的难度仍相当于对一个极大的数进行质因数分解的困难程度,这种计算被认为是所有计算机科学中最难的问题之一。因此, 如果你发现了一种能够快速地将一个极大的数字分解为质因数的方法,就不仅能够入侵瑞士银行的账户系统,而且还可以获得图灵奖了。
任何人只要知道了其公开密钥,就可以向一台公共服务器发送安全报文,所以非对称的公开密钥加密系统是很好用的。两个节点无须为了进行安全的通信而先交换私有密钥。
但公开密钥加密算法的计算可能会很慢。实际上它混合使用了对称和非对称策略。 比如,比较常见的做法是在两节点间通过便捷的公开密钥加密技术建立起安全通信, 然后再用那条安全的通道产生并发送临时的随机对称密钥,通过更快的对称加密技 术对其余的数据进行加密。(SSH和HTTPS都是这样的)
除了加 / 解密报文之外,还可以用加密系统对报文进行签名(sign)
,以说明是谁编写的报文,同时证明报文未被篡改过。这种技术被称为数字签名(digital signing)
。
数字签名是附加在报文上的特殊加密校验码。数字签名通常是用 非对称公开密钥
인기 있는 대칭 키 암호화 알고리즘은 다음과 같습니다.DES
, Triple-DES
, RC2
및 RC4
.
키를 기밀로 유지하는 것이 중요합니다. 많은 경우 인코딩/디코딩 알고리즘은 잘 알려져 있으므로 비밀로 유지되는 유일한 것은 키뿐입니다. 좋은 암호화 알고리즘은 공격자가 코드를 해독하기 전에 가능한 모든 키를 시도하도록 합니다. 모든 키 값을 시도하기 위해 무차별 공격을 사용하는 것을 열거 공격
이라고 합니다. 단점
대칭 키 암호화 기술
의 단점 중 하나는 송신자와 수신자가 서로 대화하기 전에 를 가지고 있어야 한다는 것입니다. 예를 들어 Alice(A), Bob(B) 및 Chris(C)는 모두 Joe의 철물점(J)과 대화하고 싶어합니다. A, B, C는 모두 자신과 J 사이에 비밀 키를 설정해야 합니다. A에는 KAJ 키가 필요할 수 있고, B에는 KBJ 키가 필요할 수 있으며, C에는 KCJ 키가 필요할 수 있습니다. 각 통신 엔터티 쌍에는 자체 개인 키가 필요합니다. N개의 노드가 있는 경우 각 노드는 N-1개의 다른 모든 노드와 안전하게 통신해야 하며 총 N2개의 비밀 키가 있게 됩니다. 이는
관리의 악몽🎜이 될 것입니다. 🎜🎜공개 키 암호화🎜🎜각 호스트 쌍에 별도의 암호화/복호화 키를 사용하는 대신 공개 키 암호화에서는 두 개의비대칭 키
를 사용합니다. 🎜하나는 호스트 메시지 인코딩용이고 다른 하나는 다음 용도로 사용됩니다. 호스트 메시지를 디코딩🎜. 🎜🎜RSA🎜🎜모든 공개 키 비대칭 암호화 시스템이 직면하는 일반적인 과제는 누군가 다음 단서를 모두 가지고 있더라도 비밀 개인 키를 계산할 수 없도록 하는 것입니다. 🎜서명
할 수도 있습니다. 메시지가 변조되지 않았다는 것입니다. 이 기술을 디지털 서명
이라고 합니다. 🎜🎜🎜디지털 서명은 메시지🎜에 첨부된 특수 암호화된 인증 코드입니다. 디지털 서명은 일반적으로 비대칭 공개 키
기술을 사용하여 생성됩니다. 개인키는 소유자만이 알고 있기 때문에 작성자의 개인키는 일종의 '지문'으로 활용될 수 있다. 🎜🎜🎜🎜🎜🎜🎜🎜 RSA 암호화 시스템은 D가 이미 개인 키를 입력으로 사용했기 때문에 디코딩 기능 D를 서명 기능으로 사용합니다. 디코드 기능은 단순한 기능이므로 어떤 입력에도 사용할 수 있습니다. 마찬가지로 RSA 암호화 시스템에서는 D와 E 기능이 어떤 순서로든 적용되면 서로 상쇄됩니다. 따라서 D(E(stuff)) = stuff와 마찬가지로 E(D(stuff)) = stuff입니다. 🎜🎜🎜참고🎜🎜🎜개인 키와 공개 키는 한 쌍이므로 둘 다 암호화 및 복호화하여 쌍으로 사용할 수 있습니다🎜. RSA의 원리는 두 개의 큰 소수(p, q)의 곱(n)은 역으로 풀기가 어렵기 때문에 pq가 동등하고, 공개키와 개인키도 동등하다는 것이다. 🎜개인키 암호화와 공개키 복호화는 "개인키 소유자"의 고유한 신원을 증명할 수 있으며 서명에 사용됩니다.
공개 키 암호화 및 개인 키 복호화를 통해 전송된 정보는 "개인 키 소유자"만 복호화할 수 있습니다(개인 키를 사용하여 데이터를 암호화하고 전송하는 경우 공개 키 보유자가 복호화함) (보유자가 많을 수 있음) 누군가) 암호를 해독하여 정보 보호를 상실함)
인터넷의 "신분증" - 디지털 인증서. 디지털 인증서(종종 "인증서"라고도 하며 인증서 발급과 비슷함)
에는 신뢰할 수 있는 조직이 보증하는 사용자 또는 회사에 대한 정보가 포함되어 있습니다. 数字证书(通常被称作“certs”,有点像 certs 牌薄荷糖)
中包含了由某个受信任组织担保的用户或公司的相关信息。
数字证书中还包含一组信息,所有这些信息都是由一个官方的 证书颁发机构(CA)
以数字方式签发的。
而且,数字证书通常还包括对象的公开密钥,以及对象和所用签名算法的描述性信息。任何人都可以创建一个数字证书,但并不是所有人都能够获得受人尊敬的签发 权,从而为证书信息担保,并用其私有密钥签发证书。典型的证书结构如图所示。
不幸的是,数字证书没有单一的全球标准。就像不是所有印刷版 ID 卡都在同样的位 置包含了同样的信息一样,数字证书也有很多略有不同的形式。 不过好消息就是现 在使用的大多数证书都以一种标准格式—— X.509 v3
,来存储它们的信息。X.509 v3 证书提供了一种标准的方式,将证书信息规范至一些可解析字段中。不同类型的证 书有不同的字段值,但大部分都遵循X.509 v3结构。
基于 X.509 证书的签名有好几种,(其中)包括 Web 服务器证书、客户端电子邮件 证书、软件代码签名证书和证书颁发机构证书。
通过 HTTPS 建立了一个安全 Web 事务之后,现代的浏览器都会自动获取所连接服 务器的数字证书。如果服务器没有证书,安全连接就会失败。
浏览器收到证书时会对签名颁发机构进行检查。如果这个机构是个很有权威的公共签名机构,浏览器可能已经知道其公开密钥了(浏览器会预先安装很多签名颁发机构的证书)。
如果对签名颁发机构一无所知,浏览器就无法确定是否应该信任这个签名颁发机构, 它通常会向用户显示一个对话框,看看他是否相信这个签名发布者。签名发布者可 能是本地的 IT 部门或软件厂商。
HTTPS 是最流行的 HTTP 安全形式。它是由网景公司首创的,所有主要的浏览器和 服务器都支持此协议。
使用 HTTPS 时,所有的 HTTP 请求和响应数据在发送到网络之前,都要进行加密。 HTTPS 在 HTTP 下面提供了一个传输级的密码安全层——可以使用 SSL,也可以使用其后继者—— 传输层安全(Transport Layer Security,TLS)
。由于 SSL 和 TLS 非常类似,所以我们不太严格地用术语 SSL 来表示 SSL 和 TLS。
不使用SSL/TLS的HTTP通信,就是不加密的通信。所有信息明文传播,带来了三大风险。
窃听风险(eavesdropping)
:第三方可以获知通信内容。
篡改风险(tampering)
:第三方可以修改通信内容。
冒充风险(pretending)
:第三方可以冒充他人身份参与通信。
SSL/TLS协议是为了解决这三大风险而设计的,希望达到:
所有信息都是加密传播,第三方无法窃听。
具有校验机制,一旦被篡改,通信双方会立刻发现。
配备身份证书,防止身份被冒充。
SSL(Secure Socket Layer)是安全套接层
,TLS(Transport Layer Security)是传输层安全协议
인증 기관(CA)
에서 디지털 방식으로 발급됩니다. 또한 디지털 인증서에는 일반적으로 객체의 공개 키는 물론 객체에 대한 설명 정보와 사용된 서명 알고리즘도 포함됩니다. 누구나 디지털 인증서를 만들 수 있지만 모든 사람이 인증서 정보를 보증하고 개인 키로 인증서를 발급할 수 있는 발급 권한을 갖고 있는 것은 아닙니다. 일반적인 인증서 구조가 그림에 나와 있습니다.
x.509 V3 인증서는 디지털 인증서에 대한 단일 글로벌 표준은 없습니다. 인쇄된 모든 ID 카드가 동일한 장소에 동일한 정보를 담고 있는 것은 아닌 것처럼, 디지털 인증서도 약간씩 다른 형태로 제공됩니다. 하지만 좋은 소식은 오늘날 사용되는 대부분의 인증서가 정보를 표준 형식인 X.509 v3
로 저장한다는 것입니다. X.509 v3 인증서는 인증서 정보를 구문 분석 가능한 여러 필드로 공식화하는 표준 방법을 제공합니다. 인증서 유형에 따라 필드 값이 다르지만 대부분은 X.509 v3 구조를 따릅니다.
TLS(전송 계층 보안)
를 사용하여 전송 수준 암호화 보안 계층을 제공합니다. SSL과 TLS는 매우 유사하므로 SSL과 TLS를 모두 지칭하기 위해 SSL이라는 용어를 덜 엄격하게 사용합니다. 🎜🎜🎜🎜🎜🎜SSL/TLS🎜🎜SSL/TLS를 사용하지 마세요 HTTP 통신은 암호화되지 않은 통신입니다. 일반 텍스트로 분산된 모든 정보는 세 가지 주요 위험을 초래합니다. 🎜도청 위험(도청)
: 제3자가 통신 내용을 알 수 있습니다. 🎜🎜🎜🎜위조
: 제3자가 통신 내용을 수정할 수 있습니다. 🎜🎜🎜🎜가장
: 제3자가 통신에 참여하기 위해 다른 사람인 것처럼 가장할 수 있습니다. 🎜🎜SSL(Secure Socket Layer)은 보안 소켓 계층입니다
, TLS(Transport Layer Security)는 전송 계층 보안 프로토콜
이며 SSL3을 기반으로 구축되었습니다. .0 프로토콜 사양은 SSL3.0의 후속 버전입니다. SSL은 버전 3.0까지 대규모로 배포 및 적용되지 않았습니다. TLS 버전과 SSL의 명백한 차이점은 다양한 암호화 알고리즘을 지원한다는 것입니다. 현재 사용되는 최신 프로토콜은 TLS1.2 프로토콜입니다. 버전 1.3은 아직 초안 단계에 있습니다. 🎜🎜🎜🎜🎜🎜🎜 HTTPS 체계 🎜🎜보안 HTTP는 이제 선택 사항입니다. 웹 리소스에서 트랜잭션을 수행하도록 클라이언트(예: 웹 브라우저)에 요청할 때 URL 구성표를 확인합니다. 🎜URL 구성표가 http인 경우 클라이언트는 서버 포트 80(기본값)에 대한 연결을 열고 이전 HTTP 명령을 보냅니다.
URL 구성표가 https인 경우 클라이언트는 기본적으로 서버 포트 443에 대한 연결을 연 다음 서버와 "핸드셰이크"하고 일부 SSL 보안 매개변수를 서버와 바이너리 형식으로 교환한 다음 암호화를 첨부합니다. HTTP 명령.
SSL은 HTTP와 완전히 다른 바이너리 프로토콜이며 해당 트래픽은 다른 포트를 통해 전달됩니다(SSL은 일반적으로 포트 443을 통해 전달됩니다). SSL과 HTTP 트래픽이 모두 포트 80에 도착하면 대부분의 웹 서버는 바이너리 SSL 트래픽을 잘못된 HTTP로 해석하고 연결을 닫습니다. 보안 서비스를 HTTP 계층에 추가로 통합하면 여러 대상 포트를 사용할 필요가 없어져 실제로는 심각한 문제가 발생하지 않습니다.
암호화된 통신을 시작하기 전에 클라이언트와 서버는 먼저 연결을 설정하고 매개변수를 교환해야 합니다. 이 프로세스를 핸드셰이크라고 합니다. 클라이언트가 Alice이고 서버가 Bob이라고 가정하면 전체 핸드셰이크 프로세스는 다음 그림과 같이 설명할 수 있습니다.
핸드셰이크 단계는 5단계로 나뉩니다.
Alice는 프로토콜 버전 번호, 클라이언트에서 생성된 임의 번호(클라이언트 임의)
및 지원되는 암호화를 제공합니다. 클라이언트 방법. 随机数(Client random)
,以及客户端支持的加密方法。
鲍勃确认双方使用的加密方法,并给出数字证书、以及一个 服务器生成的随机数(Server random)
。
爱丽丝确认数字证书有效,然后生成一个新的 随机数(Premaster secret)
,并使用数字证书中的公钥,加密这个随机数,发给鲍勃。
鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret
)。
爱丽丝和鲍勃根据约定的加密方法,使用前面的三个随机数,生成 对话密钥(session key)
,用来加密接下来的整个对话过程。
上面的五步,画成一张图,就是下面这样:
握手阶段有三点需要注意:
生成对话密钥一共需要三个随机数。
握手之后的对话使用 对话密钥(session key)
加密(对称加密),服务器的公钥和私钥只用于加密和解密 对话密钥(session key)
(非对称加密),无其他作用。
服务器公钥放在服务器的数字证书之中。
整个握手阶段都不加密(也没法加密),都是明文的。因此,如果有人窃听通信,他可以知道双方选择的加密方法,以及三个随机数中的两个。整个通话的安全,只取决于 第三个随机数(Premaster secret)
能不能被破解。
虽然理论上,只要服务器的公钥足够长(比如2048位),那么 Premaster secret
可以保证不被破解。但是为了足够安全,我们可以考虑把握手阶段的算法从默认的 RSA算法,改为 Diffie-Hellman算法(简称DH算法)。
采用 DH算法
后,Premaster secret
不需要传递,双方只要交换各自的参数,就可以算出这个随机数。
上图中,第三步和第四步由传递 Premaster secret
变成了传递 DH算法
所需的参数,然后双方各自算出 Premaster secret
。这样就提高了安全性。
SSL 支持双向认证,将服务器证书承载回客户端,再将客户端的证书回送给服务器。 而现在,浏览时并不经常使用客户端证书。大部分用户甚至都没有自己的客户端证书。服务器可以要求使用客户端证书,但实际中很少出现这种情况。
SSL 自身不要求用户检查 Web 服务器证书,但大部分现代浏览器都会对证书进行简 单的完整性检查,并为用户提供进行进一步彻查的手段。网景公司提出的一种 Web 服务器证书有效性算法是大部分浏览器有效性验证技术的基础。验证步骤如下所述:
日期检测
서버에서 생성된 난수(Server Random)
를 제공했습니다. 🎜🎜🎜🎜Alice는 디지털 인증서가 유효한지 확인한 다음 새로운 난수(Premaster secret)
를 생성하고 디지털 인증서의 공개 키를 사용하여 난수를 암호화한 후 Bob에게 보냅니다. . 🎜🎜🎜🎜Bob은 자신의 개인 키를 사용하여 Alice가 보낸 난수(예: Premaster secret
)를 얻습니다. 🎜🎜🎜🎜Alice와 Bob은 이전 3개의 난수를 사용하여 합의된 암호화 방법에 따라 세션 키
를 생성하며, 이는 전체 후속 대화 프로세스를 암호화하는 데 사용됩니다. 🎜🎜🎜위의 5단계를 그림으로 표현하면 다음과 같습니다. 🎜🎜🎜🎜🎜🎜핸드셰이크 단계에서 주의해야 할 세 가지 사항은 다음과 같습니다. 🎜🎜🎜🎜대화 키를 생성하려면 총 세 개의 난수가 필요합니다. 🎜🎜🎜🎜핸드셰이크 이후의 대화는 세션 키
를 사용하여 암호화(대칭 암호화)됩니다. 서버의 공개 키와 개인 키는 세션 키)(비대칭 암호화)는 다른 효과가 없습니다. 🎜🎜🎜🎜서버 공개 키는 서버의 디지털 인증서에 저장되어 있습니다. 🎜🎜🎜DH 알고리즘의 핸드셰이크 단계🎜🎜전체 핸드셰이크 단계는 암호화되지 않으며(암호화할 수 없음) 모두 일반 텍스트입니다. 따라서 누군가가 통신을 도청하면 양측이 선택한 암호화 방법은 물론 3개의 난수 중 2개를 알 수 있습니다. 전체 통화의 보안은 <code>세번째 난수(프리마스터 비밀번호)
를 크랙할 수 있는지 여부에만 달려 있습니다. 🎜🎜이론적으로는 서버의 공개 키가 충분히 길면(예: 2048비트) Premaster secret
이 해독되지 않도록 보장할 수 있습니다. 하지만 충분히 보안을 유지하기 위해 핸드오버 단계에서 알고리즘을 기본 RSA 알고리즘에서 Diffie-Hellman 알고리즘(줄여서 DH 알고리즘)으로 변경하는 것을 고려할 수 있습니다. 🎜🎜DH 알고리즘
을 사용한 후에는 Premaster 비밀
을 전달할 필요가 없습니다. 두 당사자는 난수를 계산하기 위해 각자의 매개변수만 교환하면 됩니다. 🎜🎜🎜🎜🎜🎜위 사진에서 3,4단계부터 프리마스터 비밀
을 DH 알고리즘
에 필요한 매개변수에 전달하면 양 당사자가 별도로 프리마스터 비밀
을 계산합니다. 이렇게 하면 보안이 향상됩니다. 🎜🎜서버 인증서🎜🎜SSL은 서버 인증서를 클라이언트로 다시 전달한 다음 클라이언트의 인증서를 다시 서버로 보내는 양방향 인증을 지원합니다. 요즘에는 탐색할 때 클라이언트 인증서가 자주 사용되지 않습니다. 대부분의 사용자는 자신의 클라이언트 인증서조차 갖고 있지 않습니다. 서버는 클라이언트 인증서를 요구할 수 있지만 실제로는 그런 경우가 거의 없습니다. 🎜🎜사이트 인증서 유효성🎜🎜SSL 자체에서는 사용자에게 웹 서버 인증서 확인을 요구하지 않지만, 대부분의 최신 브라우저는 인증서에 대해 간단한 무결성 확인을 수행하고 사용자에게 추가 조사를 수행할 수 있는 수단을 제공합니다. Netscape에서 제안한 웹 서버 인증서 유효성 알고리즘은 대부분의 브라우저 유효성 확인 기술의 기초입니다. 확인 단계는 아래에 설명되어 있습니다. 🎜🎜🎜🎜날짜 감지
먼저 브라우저는 인증서의 시작 날짜와 종료 날짜를 확인하여 인증서가 여전히 유효한지 확인합니다. 인증서가 만료되었거나 활성화되지 않은 경우 인증서 유효성 확인이 실패하고 브라우저에 오류 메시지가 표시됩니다. 🎜
签名颁发者可信度检测
每个证书都是由某些 证书颁发机构(CA)
签发的,它们负责为服务器担保。证书有不同的等级,每种证书都要求不同级别的背景验证。比如,如果申请某个电 子商务服务器证书,通常需要提供一个营业的合法证明。
任何人都可以生成证书,但有些 CA 是非常著名的组织,它们通过非常清晰的流 程来验证证书申请人的身份及商业行为的合法性。因此,浏览器会附带一个签名颁发机构的受信列表。如果浏览器收到了某未知(可能是恶意的)颁发机构签发的证书,那它通常会显示一条警告信息。
签名检测
一旦判定签名授权是可信的,浏览器就要对签名使用签名颁发机构的公开密钥, 并将其与校验码进行比较,以查看证书的完整性。
站点身份检测
为防止服务器复制其他人的证书,或拦截其他人的流量,大部分浏览器都会试着 去验证证书中的域名与它们所对话的服务器的域名是否匹配。服务器证书中通常 都包含一个域名,但有些 CA 会为一组或一群服务器创建一些包含了服务器名称 列表或通配域名的证书。如果主机名与证书中的标识符不匹配,面向用户的客户 端要么就去通知用户,要么就以表示证书不正确的差错报文来终止连接。
SSL 是个复杂的二进制协议。除非你是密码专家,否则就不应该直接发送原始的 SSL 流量。幸运的是,借助一些商业或开源的库,编写 SSL 客户端和服务器并不十 分困难。
OpenSSL 是 SSL 和 TLS 最常见的开源实现。OpenSSL 项目由一些志愿者合作开发, 目标是开发一个强壮的、具有完备功能的商业级工具集,以实现 SSL 和 TLS 协议以 及一个全功能的通用加密库。可以从 http://www.openssl.org 上获得 OpenSSL 的相 关信息,并下载相应软件。
强烈推荐一本书:HTTP 权威指南
매우 상세한 분석 | 전체 네트워크에 대해 1분 안에 효과적인 CDN HTTPS 최적화 실습
SSL/TLS 프로토콜 설명
HTTP 권위 있는 가이드
20시간 전 게시물
감사합니다
댓글
댓글 더 보기
위 내용은 HTTPS에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!