目录
4.1.1 SSL(Secure Sockets Layer)
4.1.2 TLS(Transport Layer Security)
一、加密技术
1.1 基本保密通信模型
1.2 密码学发展
1.2.1 古典密码学(1949年前)
主要特点:数据的安全基于算法的保密
- 在古典密码学中,密码算法通常是通过⼿⼯或机械装置实现的。
- 数据的安全性主要依赖于算法本身的保密性,即“安全通过模糊性”(Security throughobscurity)。
- 经典的加密⽅法包括凯撒密码(Caesar Cipher)、维吉尼亚密码(Vigenère Cipher)等,这些算法通常容易被频率分析或其他简单的分析⽅法破解
1.2.2 近代密码学(1949~1975年)
主要特点:密码学真正成为⼀⻔科学
- 近代密码学以 1949 年⾹农(Claude Shannon)的奠基性⼯作为标志,特别是他关于通信和信息理论的贡献。
- ⾹农提出了密码系统的科学基础,包括混淆和扩散的概念,以及他所定义的完全保密系统。
- 在这⼀时期,密码学从主要依赖经验的技术逐渐演变为⼀种数学和理论基础上的科学。
- 例如,数据加密标准(DES,1977年正式发布,发展于近代密码学后期)开始出现,成为对称加密的⼀个经典例⼦
1.2.3 现代密码学(1976年以后)
密码学的新⽅向—公钥密码学主要特点:解决了密钥分发和管理的问题
- 1976 年,迪菲和赫尔曼(Diffie-Hellman)提出了公钥密码学的概念,这标志着现代密码学的开端
- 现代密码学的最⼤突破之⼀是引⼊了公钥加密系统,使得加密和解密可以使⽤不同的密钥,从⽽解决了密钥分发和管理的难题。
- 典型的公钥加密算法包括 RSA、椭圆曲线加密(ECC)和 Diffie-Hellman 密钥交换协议等。
- 同时,现代密码学还涵盖了对称加密、数字签名、哈希函数、消息认证码(MAC)、零知识证明(Zero-Knowledge Proof)等⼴泛的应⽤领域
1.3 古典密码
1.3.1 古典密码学的特点:
1. 安全性在于保持算法本身的保密性
- 在古典密码学中,安全性主要依赖于算法的保密性,也就是说,只有那些了解算法的⼈才能加密和解密信息。
- 这种安全性被称为“安全通过模糊性”(Security through Obscurity),但⼀旦算法被公开或泄露,整个加密系统的安全性就会受到威胁。
2. 不适合⼤规模⽣产
- 由于古典密码学中的加密和解密过程往往是⼿⼯或机械完成的,这使得它们不适合处理⼤量数据。
- 随着信息量的增加,使⽤古典密码学⽅法在⼤规模⽣产中变得⾮常不现实。
3. 不适合较⼤的或者⼈员变动较⼤的组织
- 古典密码学在维护密钥和算法的保密性⽅⾯具有挑战性,尤其是在组织规模较⼤或⼈员变动频繁的情况下,确保每个成员都正确安全地使⽤密钥和算法变得⾮常困难。
4. ⽤户⽆法了解算法的安全性
- 由于算法是保密的,⽤户只能依赖算法设计者的声明,⽽⽆法独⽴验证算法的安全性。
- 这与现代密码学的公开算法原则形成鲜明对⽐,在现代密码学中,算法通常是公开的,安全性依赖于数学复杂性⽽不是秘密
1.3.2 古典密码学的主要分类
1. 替代密码(Substitution Ciphers)
- 替代密码是古典密码学中最基本的加密⽅法之⼀,它通过⽤另⼀个字⺟或符号替代每个字⺟来加密消息。
- 例如,凯撒密码是⼀种简单的替代密码,字⺟表中的每个字⺟都被替换为字⺟表中固定位置之后的某个字⺟。
2. 置换密码(Transposition Ciphers)
- 置换密码通过重新排列消息中的字符顺序来加密信息,⽽不改变每个字符本身。
- 这种⽅法通过对字符的位置进⾏混淆来增强信息的安全性。
3. 替代密码与置换密码的组合
- 为了增强加密的安全性,古典密码学中有时会结合使⽤替代密码和置换密码,形成更加复杂的加密系统。
- 这种组合通常能更有效地抵御简单的分析攻击,但仍然可能被更复杂的密码分析⽅法破解
1.4 近代密码学
⾹农(Claude Shannon)在 1949 年发表的⼀篇具有⾥程碑意义的论⽂《秘密系统的通信理论》(TheCommunication Theory of Secret Systems)对密码学的影响。
⾹农的贡献: 1949年,克劳德·⾹农发表了《秘密系统的通信理论》这篇论⽂。这篇论⽂将信息论(Information Theory)引⼊了密码学领域,从⽽使密码学从过去的经验性、技巧性发展成为⼀⻔严谨的科学。⾹农的⼯作奠定了现代密码学的理论基础,并且他的研究成果成为了密码学的基本原理之⼀
主要影响:
- 信息论的引⼊:⾹农通过将信息论应⽤于密码学,提出了对混淆(Confusion)和扩散(Diffusion)的科学描述,这两者是现代加密系统设计的核⼼原则。混淆指的是增加明⽂与密⽂之间的复杂关系,⽽扩散则是将明⽂的信息扩展到密⽂的整个范围,以防⽌简单的分析攻击。
- 完全保密系统:⾹农还定义了完全保密系统的概念,即在没有密钥的情况下,即使拦截到密⽂,攻击者也⽆法获得任何有⽤的信息。这个概念为理解和设计安全的加密系统提供了理论框架。
- 奠定了密码学的科学基础:在⾹农的研究之前,密码学主要依赖于实践和经验,⽽他的⼯作使得密码学开始成为⼀⻔基于数学和逻辑的科学
影响与应⽤: ⾹农的理论为之后的加密技术发展提供了指导,特别是在设计对称加密算法和分析加密系统的安全性⽅⾯。他的⼯作也对现代信息安全、通信安全和数据保护领域产⽣了深远的影响。
⾹农的研究标志着近代密码学的开端,从此密码学成为了⼀⻔具有坚实数学基础的科学,进⽽推动了计算机科学和信息技术的发展
1.5 现代密码学
1976年,惠特菲尔德·迪菲(Whitfield Diffie) 和 ⻢丁·赫尔曼(Martin Hellman) 发表了具有⾰命性意义的论⽂《密码学中的新⽅向》("New Directions in Cryptography"),提出了⾮对称密钥密码学(也称为公钥密码学)的概念。这⼀发明彻底改变了密码学的基础,解决了密钥分发和管理的重⼤问题
1.5.1 非对称密钥密码学的基本概念
⾮对称密钥密码学与之前的对称密钥密码学不同,它使⽤⼀对密钥——公钥和私钥。这对密钥具有以下特性:
- 公钥(Public Key):可以公开分发,任何⼈都可以使⽤这个密钥来加密信息。
- 私钥(Private Key):必须保密,只有密钥的持有者才能使⽤它来解密信息。
这种加密⽅式的⼀个关键优势在于,信息的发送⽅不需要知道接收⽅的私钥,从⽽解决了对称加密中如何安全地分发和管理密钥的问题
1.5.2 Diffie-Hellman 密钥交换
在他们的论⽂中,迪菲和赫尔曼还提出了 Diffie-Hellman 密钥交换协议,这是第⼀个实⽤的公钥协议。该协议允许两⽅在不共享秘密信息的情况下,安全地⽣成⼀个共享的密钥,⽤于后续的加密通信。具体过程如下:
- 双⽅各⾃选择⼀个秘密的私有数字。
- 双⽅使⽤各⾃的私有数字和⼀个公共参数(通常是⼀个⼤素数)⽣成⼀个公开的数值,并将其发送给对⽅。
- 每⼀⽅使⽤接收到的数值和⾃⼰的私有数字计算出⼀个共享的秘密值。这个共享的秘密值可以⽤作后续加密通信的密钥,从⽽实现安全通信,⽽不需要提前分发密钥
1.6 密码系统的安全性
影响密码系统安全性的基本因素:
- 密码算法复杂度、密钥机密性、密钥⻓度
- 科克霍夫(Kerckhoff)原则:密码体制应该对外公开,仅需对密钥进⾏保密;如果⼀个密码系统需要保密的越多,可能的弱点也越多
评估密码系统安全性:
- ⽆条件安全、计算安全性、可证明安全性
密码系统实际安全需要满⾜的准则:
- 破译该密码系统的实际计算量⽆法实现
- 破译该密码系统所需计算时间超过信息的⽣命周期
- 破译该密码系统的费⽤超过被加密信息本身的价值
密码学技术在信息安全中的应用:
1.7 对称加密算法与非对称加密算法
1.7.1 对称加密算法
加密密钥和解密密钥相同,或实质上等同
典型算法:DES、3DES、AES、IDEA、SM1等
优点:⾼效
不⾜:安全交换密钥问题及密钥管理复杂
1.7.2 非对称加密算法
密钥成对 (公钥, 私钥)
公钥加密私钥解、私钥加密公钥解
典型算法:RSA、ECC、 ElGamal
优点:解决密钥传递问题、密钥管理简单、提供数字签名等其他服务
缺点:计算复杂、耗⽤资源⼤
1.8 国产密码算法
- SM1分组密码算法
- SM2椭圆曲线公钥密码算法
- SM3密码杂凑算法
- SM4分组密码算法
- SM7分组密码算法
- SM9标识密码算法
SM系列密码算法概述
● SM1、SM4、SM7:这些是对称加密算法。对称加密算法使⽤同⼀个密钥进⾏加密和解密。
- SM1 和 SM7:⽬前尚未公开,属于未公开的国家机密级别算法。
- SM4:已公开,是⽬前⼴泛使⽤的对称加密标准,特别适⽤于⽆线局域⽹(WLAN)环境的安全加密。
● SM2、SM9:这些是⾮对称加密算法。⾮对称加密使⽤⼀对密钥(公钥和私钥)来进⾏加密和解密。
- SM2:基于椭圆曲线密码学(ECC),是⼀种⾮对称加密算法,⼴泛应⽤于数字签名、密钥交换和数据加密。⾃2011年7⽉1⽇起,所有新投⼊运⾏的公钥密码信息系统应使⽤SM2算法。
- SM9:也是⼀种⾮对称加密算法,通常⽤于身份基(ID-based)的密码系统中。
● SM3:这是⼀种散列算法,⽤于⽣成消息摘要,以验证数据的完整性。SM3 已公开,作为中国的标准散列算法,⼴泛应⽤于数字签名和数据完整性校验
1.8.1 SM1算法简介
- 定义:SM1 是由中国国家密码管理局制定的⼀种商⽤密码分组对称加密算法。作为⼀种对称加密算法,它在加密和解密时使⽤相同的密钥。
- 安全性与性能:SM1 的安全性和保密强度与国际⼴泛使⽤的 AES(⾼级加密标准)算法相当,具有较⾼的安全保障。同时,其软硬件实现性能也达到了与 AES 类似的⽔平,使其能够在各种应⽤中⾼效运⾏。
- 未公开:⽬前,SM1 算法尚未公开,属于国家机密级别的加密算法。由于未公开,SM1 主要以 IP核(Intellectual Property Core)的形式存在于芯⽚中。这意味着算法的具体实现被嵌⼊在硬件芯⽚内,外部⽤户不能直接访问算法本身,只能通过特定的加密芯⽚接⼝进⾏调⽤
1.8.2 SM2算法简介
- 定义:SM2 是由中国国家密码管理局发布的⼀种椭圆曲线公钥密码算法。该算法主要⽤于数字签名和密钥交换,作为对对称加密算法的补充。SM2 被设计⽤于多种加密需求场景,包括数字签名、密钥交换以及数据加密。
- 密钥⻓度:SM2 算法的密钥⻓度⼀般为 256 位。这是基于椭圆曲线密码学(ECC)的⼀个常⻅选择,256 位密钥⻓度能够提供⾜够的安全性,同时⽐传统的⾮对称加密算法(如 RSA)使⽤较短的密钥实现相同强度的安全性
应用场景:
- 数字签名:SM2 被⼴泛⽤于⽣成和验证数字签名,确保数据的完整性和来源的真实性。数字签名在电⼦政务、电⼦商务、合同签署等领域具有重要应⽤。
- 密钥交换:SM2 ⽀持安全的密钥交换协议,使得通信双⽅能够在不直接传输密钥的情况下⽣成共享的秘密密钥,⽤于后续的对称加密通信。
- 加密:尽管 SM2 主要⽤于签名和密钥交换,它也能够⽤于加密数据,特别是在需要⾼安全性的场合
1.8.3 SM3算法简介
定义:SM3 是中国国家密码管理局发布的⼀种密码学安全杂凑算法(也称为哈希算法)。它是中国国家标准(GB/T 32905-2016)的⼀部分,⼴泛应⽤于数据完整性验证、数字签名、消息认证码(MAC)等安全领域
SM3 特点:
- 密码学安全性:SM3 是⼀种安全的哈希算法,设计⽤于防⽌碰撞攻击(即找到两个不同输⼊⽣成相同的哈希值)和原像攻击(即根据哈希值找到原始输⼊数据)。
- 固定⻓度输出:SM3 可以将任意⻓度的输⼊消息映射为固定⻓度的杂凑值。具体来说,SM3 ⽣成的杂凑值⻓度为 256 位(32 字节),这与 SHA-256 相当。
- 处理⽅式:SM3 算法⾸先将输⼊消息分成固定⻓度的块进⾏处理,每个块⻓度为 512 位。然后,算法通过⼀系列复杂的置换和混合操作,对这些数据块进⾏处理,⽣成最终的哈希值。这些操作确保了输⼊消息的每⼀位都会影响最终⽣成的哈希值,增强了算法的安全性
SM3的应用:
SM3 被⼴泛应⽤于需要数据完整性和数据验证的安全应⽤中,以下是⼀些典型的应⽤场景:
- 数据完整性验证:在传输或存储过程中,通过计算和⽐较 SM3 哈希值,可以验证数据是否被篡改。
- 数字签名:SM3 常与数字签名算法(如 SM2)结合使⽤,先对消息进⾏哈希处理,再对⽣成的哈希值进⾏签名,以确保消息的完整性和真实性。
- 消息认证码(MAC):SM3 可以与密钥结合使⽤⽣成消息认证码,⽤于验证消息在传输过程中是否遭到篡改
1.8.4 SM4算法简介
定义:SM4 是中国国家密码管理局发布的⼀种分组对称加密算法,作为国家标准被正式命名为 GB/T32907-2016。SM4 主要⽤于数据的加密和解密
SM4 的算法结构:
- 分组密码算法:SM4 是⼀种分组加密算法,意味着它以固定⻓度的数据块(分组)为单位进⾏加密和解密。每个分组⻓度为 128 位(16 字节)。这意味着加密算法每次处理 128 位的数据,⽆论输⼊数据的总⻓度如何,都会被分割成若⼲个 128 位的分组进⾏加密。
- Feistel ⽹络结构:SM4 采⽤了 Feistel ⽹络结构。这是⼀种⼴泛⽤于构建加密算法的结构,使加密和解密过程具有相似性,这样的设计可以简化实现。
- 32 轮加密:SM4 的加密过程分为 32 轮,每⼀轮都对数据进⾏复杂的置换和替换操作,以增加加密的复杂性和安全性
SM4 的密钥⻓度:
- 128 位密钥:SM4 ⽀持的密钥⻓度为 128 位(16 字节)。这个密钥⻓度在现代对称加密算法中较为常⻅,能够提供⾜够的安全性来防⽌暴⼒破解
应用场景:
SM4 被⼴泛应⽤于需要对数据进⾏加密和解密的场景,尤其在以下⼏个领域:
- ⽆线⽹络安全:SM4 被⽤于保护⽆线局域⽹(WLAN)的通信安全。
- 加密存储:⽤于⽂件和数据的加密存储,防⽌未经授权的访问。
- 电⼦政务和电⼦商务:在电⼦政务和电⼦商务系统中,SM4 被⽤于保障敏感数据的安全传输
1.8.5 SM7算法简介
SM7 是⼀种分组对称加密算法,设计⽤于在各种应⽤场景中提供数据加密保护。它的分组⻓度为 128⽐特(16 字节),密钥⻓度也为 128 ⽐特(16 字节)。
- 保密性:SM7 算法尚未公开发布,属于未公开的国家级机密算法。这意味着 SM7 的详细算法结构和安全性分析信息没有对外公布,主要⽤于特定应⽤场景中的数据保护。
- ⾼效性:SM7 设计⽤于⾮接触式 IC 卡和类似应⽤场景,确保在有限的硬件资源上实现⾼效的数据加密处理
SM7的应用场景:
SM7 被⼴泛应⽤于以下⾮接触式 IC 卡应⽤领域:
1. 身份识别类应⽤:
- ⻔禁卡:⽤于控制对建筑物或特定区域的访问权限。
- ⼯作证:⽤于公司或机构内部的身份认证。
- 参赛证:⽤于体育赛事或其他⽐赛中的参赛⼈员身份认证。
2. 票务类应⽤:
- ⼤型赛事⻔票:在⼤型体育赛事或娱乐活动中,SM7 ⽤于保护电⼦⻔票的安全性,防⽌伪造和⾮法复制。
- 展会⻔票:在展览会或博览会中,SM7 ⽤于保护电⼦⻔票的完整性和真实性。
3. ⽀付与通卡类应⽤:
- 积分消费卡:⽤于积分消费和忠诚度计划的电⼦卡,SM7 确保交易数据的机密性和安全性。
- 校园⼀卡通:⽤于⼤学或学校中的多功能电⼦卡,⽀持⻝堂、图书馆、⻔禁等应⽤场景。
- 企业⼀卡通:⽤于企业内部的多功能电⼦卡,⽀持员⼯考勤、消费、⻔禁等应⽤。
- 公交⼀卡通:⽤于公共交通系统中的电⼦⽀付卡,SM7 确保⽀付过程的安全性。
1.8.6 SM9算法简介
定义:SM9 是中国国家密码管理局发布的⼀种密码算法,标准化为 GM/T 0024-2014。SM9 是⼀种基于标识的密码学算法,⼴泛应⽤于数字签名、密钥交换和身份认证等场景。
SM9 的算法结构:
1. 基于椭圆曲线密码学:
- SM9 是基于椭圆曲线密码学(ECC)的⼀种密码算法。ECC 是⼀种使⽤椭圆曲线数学结构进⾏加密和解密操作的⾼效密码学⽅法。
2. 双线性对(Bilinear Pairing):
- SM9 使⽤了双线性对(Bilinear Pairing)作为其密码学构建的基础。双线性对是密码学中⼀种⾼级的数学运算,常⽤于构建基于标识的加密系统。
3. 标识为基础:
- SM9 是⼀种基于标识的密码学算法,这意味着它可以使⽤⽤户的标识(如电⼦邮件地址、电话号码等)作为公钥。与传统的基于证书的公钥基础设施(PKI)相⽐,这种⽅法可以简化密钥管理,特别是在⼤规模分布式系统中。
SM9的功能:
- 数字签名:SM9 ⽀持数字签名功能,允许⽤户⽣成和验证数字签名。数字签名⽤于确保数据的完整性和真实性,防⽌伪造和篡改。
- 密钥协商:SM9 ⽀持安全的密钥协商协议,使通信双⽅能够在不直接传输密钥的情况下⽣成共享的秘密密钥。该密钥可⽤于对称加密,从⽽保护通信的机密性。
- 身份认证:SM9 的⼀个重要特点是身份认证功能。它允许⽤户使⽤标识进⾏身份验证,⽽⽆需传统的证书。这种基于标识的身份认证机制可以简化身份管理流程,并且特别适合资源受限的环境,如物联⽹设备和移动终端
二、数字签名
2.1 散列函数
散列函数(Hash Function),也称为哈希函数,是密码学中⼀个重要的⼯具。它能够将任意⻓度的输⼊数据转换为固定⻓度的输出(散列值或哈希值)。这种转换过程具有单向性,即很难从输出推断出输⼊,因此散列函数在数据完整性验证、数字签名、消息认证码、哈希表等⽅⾯有⼴泛的应⽤
2.1.1 散列函数的定义和原理
散列函数 是⼀个将任意⻓度的输⼊(称为消息)通过算法转换成⼀个固定⻓度的输出(散列值)的函数。这个输出通常以⼆进制或⼗六进制表示,并且⽆论输⼊的⼤⼩如何,输出的⻓度始终保持不变。
散列函数的原理是利⽤输⼊数据的各个部分经过⼀系列的数学运算,混淆和扩散输⼊中的每⼀个⽐特,最终⽣成⼀个看似随机但确定的固定⻓度输出。这些数学运算通常包括位操作、移位、异或等复杂的操作
2.1.2 散列函数的特点
- 固定⻓度输出:⽆论输⼊的数据有多⻓,散列函数总会⽣成固定⻓度的输出。例如,SHA-256 总是⽣成 256位(32 字节)的输出。
- 确定性:相同的输⼊总是会产⽣相同的输出。这意味着给定⼀个输⼊,每次使⽤散列函数都应⽣成相同的散列值。
- 单向性(One-Way Property):散列函数是单向的,即从输⼊计算输出⾮常容易,但从输出反推输⼊则⼏乎不可能。这⼀特性使得散列函数特别适合密码学中的数据保护。
- 抗碰撞性(Collision Resistance):抗碰撞性分为弱抗碰撞性和强抗碰撞性:弱抗碰撞性:给定⼀个输⼊ xxx 和其散列值 H(x)H(x)H(x),⼏乎不可能找到另⼀个不同的输⼊ yyy 使得 H(x)=H(y)H(x) = H(y)H(x)=H(y)。强抗碰撞性:⼏乎不可能找到任意两个不同的输⼊ xxx 和 yyy 使得 H(x)=H(y)H(x) =H(y)H(x)=H(y)。
- 雪崩效应(Avalanche Effect):任何输⼊的微⼩变化(例如⼀个⽐特的改变)都会导致散列值的显著变化。这种特性使得散列值对原始数据⾮常敏感,保证了输出的随机性和安全性
2.1.3 散列函数主要用途
- 数据完整性验证:散列函数⽤于验证数据在传输或存储过程中是否被篡改。发送⽅将数据和数据的散列值⼀起发送,接收⽅对收到的数据重新计算散列值并与接收到的散列值进⾏⽐较,若⼀致则说明数据未被篡改。
- 数字签名:在数字签名中,散列函数⽤于⽣成消息的摘要。该摘要被签名以保证消息的完整性和不可抵赖性。接收者可以验证签名和摘要,以确认消息的真实性和完整性。
- 消息认证码(MAC):散列函数与密钥结合使⽤可以⽣成消息认证码(MAC),⽤于验证消息的完整性和真实性。MAC 在确保数据的机密性⽅⾯起到了重要作⽤。
- 哈希表:在计算机科学中,散列函数⽤于将数据映射到哈希表的特定位置,⽀持⾼效的数据存储和检索操作。
- 密码学中的随机数⽣成:散列函数也可⽤于⽣成伪随机数,以提供密码学中的随机性需求
2.1.4 常见散列算法
- MD5(Message Digest Algorithm 5):输出⻓度为128位(16字节)。由于发现了严重的安全漏洞(容易发⽣碰撞攻击),MD5 已不再被认为是安全的哈希算法,但仍在⼀些⾮安全性要求⾼的场景中使⽤。
- SHA-1(Secure Hash Algorithm 1):输出⻓度为160位(20字节)。虽然⽐ MD5 更安全,但同样已被发现存在碰撞攻击的⻛险,逐渐被淘汰。
- SHA-2 系列:包括 SHA-224、SHA-256、SHA-384 和 SHA-512,输出⻓度分别为 224、256、384 和512 位。SHA-256 是⽬前⼴泛使⽤的安全哈希算法,应⽤在各种安全协议和加密算法中。
- SHA-3 系列:基于 Keccak 算法的 SHA-3 系列是最新的安全哈希标准,提供了⽐ SHA-2 更⾼的安全性。SHA-3 的变种包括 SHA3-224、SHA3-256、SHA3-384 和 SHA3-512
- SM3:SM3 是中国国家密码管理局发布的⼀种安全哈希算法,输出⻓度为256位。⼴泛应⽤于中国的电⼦政务、⾦融和通信领域
2.1.5 散列函数的安全性挑战
- 碰撞攻击:尽管散列函数设计成具有抗碰撞性,但随着计算能⼒的提升,攻击者通过暴⼒破解或⾼级数学攻击找到碰撞对的可能性在增加。例如,MD5 和 SHA-1 已被证明存在有效的碰撞攻击
- 生日攻击:⽣⽇攻击是基于⽣⽇悖论的⼀种攻击形式,攻击者通过产⽣⼤量不同的输⼊并寻找在⼀个输出⻓度为 n位的哈希函数中,寻找两个不同输⼊具有相同哈希值(碰撞)的概率问题可以通过⽣⽇悖论来估计
2.2 数字签名
数字签名(Digital Signature)是⼀种⽤于验证数据的真实性和完整性的密码学技术。数字签名在电⼦⽂件和信息的传输过程中扮演着重要⻆⾊,确保信息来源的不可否认性、防篡改性和真实性。数字签名的概念类似于⼿写签名或印章,但它是通过密码学技术实现的,并且⽐传统的签名更加安全和可靠
2.2.1 数字签名的基本原理
数字签名基于⾮对称加密算法(也称公钥加密算法),通常由以下两个密钥组成:
- 私钥(Private Key):签名⽅持有并保密,⽤于⽣成数字签名。
- 公钥(Public Key):公开给所有接收⽅,⽤于验证数字签名的有效性。
数字签名的⽣成和验证过程包括以下步骤:
1. ⽣成数字签名
- 哈希处理:⾸先,消息发送⽅对需要签名的数据(例如⼀份电⼦⽂件或消息)进⾏哈希处理,⽣成固定⻓度的消息摘要。这个过程是单向的,任何微⼩的变化都会导致完全不同的摘要。
- 签名⽣成:然后,发送⽅使⽤其私钥对这个消息摘要进⾏加密,⽣成数字签名。由于私钥是唯⼀的,并且保密,这⼀过程确保了签名的唯⼀性和防伪性。
2. 验证数字签名
- 哈希处理:接收⽅收到带有数字签名的消息后,⾸先对接收到的数据进⾏哈希处理,⽣成消息摘要。
- 签名验证:接收⽅使⽤发送⽅的公钥对收到的数字签名进⾏解密。如果解密后的结果与⽣成的消息摘要⼀致,则表明签名有效,数据未被篡改,且来⾃合法的发送⽅
2.2.2 数字签名的特性
- 真实性(Authentication):数字签名可以证明数据的来源。由于只有持有私钥的⼈才能⽣成有效的签名,因此签名验证成功即表明数据确实来⾃私钥持有者。
- 完整性(Integrity):数字签名能够保证数据在传输过程中未被篡改。如果数据被修改,即使很⼩的改动也会导致消息摘要发⽣变化,签名验证将会失败,从⽽检测出篡改。
- 不可否认性(Non-repudiation):数字签名提供了不可否认性,签名者⽆法在事后否认其⽣成的签名。由于私钥是唯⼀且保密的,签名⽣成后,只有持有私钥的签名者才能为该消息⽣成相应的签名
2.2.4 数字签名的应用
数字签名在现代信息系统中有⼴泛的应⽤,尤其是在需要保证数据的真实性、完整性和不可否认性的场景中。以下是⼀些常⻅的应⽤领域:
- 电⼦邮件:数字签名可以⽤于验证电⼦邮件的发送者身份,并确保电⼦邮件内容未被篡改。⽤户可以通过查看邮件的数字签名来确认邮件的来源和真实性。
- 软件分发:软件开发者使⽤数字签名对发布的软件包进⾏签名,以确保⽤户下载的软件没有被恶意篡改。⽤户在安装软件前可以验证签名,以确认软件的完整性和真实性。
- 电⼦商务和在线交易:在电⼦商务和在线⽀付系统中,数字签名⽤于确保交易信息的完整性和不可否认性。签名验证确保交易⽅身份的真实性,并防⽌交易数据在传输过程中被篡改。
- 数字证书:数字证书(如SSL/TLS证书)使⽤数字签名来绑定公钥和持有者的身份信息,确保通信双⽅的身份真实性,并保护传输数据的机密性。
- 法律和合同⽂件:在电⼦合同和法律⽂件中,数字签名被⽤于替代传统的⼿写签名,具有同样的法律效⼒。数字签名确保合同签署⽅身份的真实性,并防⽌合同内容被篡改。
2.2.5 常见的数字签名算法
- RSA 签名算法:RSA 是⼀种⼴泛使⽤的⾮对称加密算法,也是常⻅的数字签名算法。RSA 签名算法使⽤较⼤的密钥(如 2048 位)来⽣成和验证签名,确保签名的安全性。
- DSA(数字签名算法):DSA 是由美国国家标准与技术研究院(NIST)提出的标准数字签名算法。它基于离散对数问题,适⽤于⽣成和验证数字签名。
- ECDSA(椭圆曲线数字签名算法):ECDSA 是⼀种基于椭圆曲线密码学的数字签名算法,相对于 RSA,ECDSA 在相同安全级别下可以使⽤更短的密钥⻓度,从⽽提⾼性能。
- SM2 签名算法:SM2 是中国国家密码管理局发布的基于椭圆曲线的数字签名算法,⼴泛应⽤于中国的电⼦政务和⾦融领域,确保数字签名的安全性和可靠性
2.2.6 数字签名与PKI(公钥基础设施)
数字签名通常与公钥基础设施(PKI)结合使⽤,以确保公钥的真实性和完整性。PKI 通过数字证书验证公钥的持有者身份,并为签名验证提供信任基础。
PKI 的核⼼组件包括:
- 证书颁发机构(CA):负责颁发、管理和吊销数字证书。
- 注册机构(RA):负责验证证书申请者的身份信息。
- 证书库:存储和分发证书及其状态信息。
- 证书吊销列表(CRL):记录失效或被吊销的证书
三、CA
3.1 PKI
公钥基础设施(Public Key Infrastructure,简称 PKI)是指⼀套由硬件、软件、⼈员、策略和程序组成的系统,⽤于创建、管理、分发、使⽤、存储和撤销数字证书。PKI 的核⼼⽬的是通过使⽤公钥加密技术来确保电⼦通信的安全性。PKI 为数据加密、数字签名、认证和其他基于公钥加密的安全服务提供了基础。
3.1.1 PKI的基本组成部分
1.证书颁发机构 (Certificate Authority, CA):
- CA 是 PKI 的核⼼组件,负责签发和管理数字证书。CA 验证实体的身份,并为其颁发绑定特定公钥的数字证书。CA 还负责证书的撤销和更新。
- 签发证书、更新证书、管理证书、撤销、查询、审计、统计
- 验证数字证书:⿊名单认证(CRL)、在线认证 (OCSP)
2.注册机构 (Registration Authority, RA):
- RA 是⼀个负责验证实体身份的辅助组件。RA 接受证书申请,验证申请者的身份,并将验证结果发送给 CA,CA 基于此颁发证书。
- RA系统的功能包括:
- 填写⽤户注册信息:RA系统允许⽤户填写注册所需的信息,如⽤户名、联系⽅式、公钥等。
- 提交⽤户注册信息:⽤户在填写完注册信息后,将信息提交⾄RA系统进⾏审核。
- 审核:RA系统对⽤户提交的信息进⾏审核,以确保信息的真实性和完整性。
- 发送⽣成证书申请:当RA系统审核通过后,将向CA发送证书⽣成申请。
- 发送证书:CA签发证书后,RA系统将证书发送给⽤户。
- 登记⿊名单:当⽤户的证书被撤销后,RA系统将其加⼊⿊名单,防⽌其再次获得证书。
- 证书撤销列表管理:RA系统可以管理CA发出的证书撤销列表。
- ⽇志审计:RA系统可以记录所有的注册、审核、证书⽣成、发送等操作,以备后续审计。
- ⾃身安全保证:RA系统必须保证其⾃身的安全性,防⽌信息泄露和恶意攻击
3.证书存储库 (Certificate Repository):
- 存储由 CA 签发的数字证书及证书撤销列表 (CRL)。通常是⼀个可以公开访问的⽬录或数据库。
4.证书撤销列表 (Certificate Revocation List, CRL):
- CRL 是⼀个由 CA 维护的列表,列出已被撤销的数字证书。这些证书不再被信任,并且不能⽤于加密或身份验证。
- CRL (Certificate Revocation List,证书吊销列表) 是⼀种⽤于通知吊销证书的机制,由CA发布。它包含了⼀系列已经被吊销的证书信息,以及吊销的原因等,客户端可以通过下载CRL来检查证书是否被吊销。
- LDAP (Lightweight Directory Access Protocol,轻量⽬录访问协议) 是⼀种⽤于访问⽬录服务的协议,常被⽤于PKI中的证书和密钥的管理和分发。LDAP可以提供快速⾼效的证书和密钥查找和下载服务,以及实现了⽬录服务的⾼可⽤性和灵活性。
- OSCP (Online Certificate Status Protocol,在线证书状态协议) 是⼀种⽤于在线检查证书状态的机制,由CA发布。OCSP可以让客户端在线查询证书的状态,以判断证书是否被吊销或过期。相⽐于CRL,OCSP可以提供更及时、实时的证书状态查询,但同时也需要更多的⽹络资源
4.证书发布库:
- ⽤于集中存放CA颁发证书和证书撤销列表CRL
- 在数字证书⽣态系统中,数字证书是由CA签发的,并⽤于验证身份、数字签名、加密等操作。然⽽,数字证书的有效性可能会受到各种因素的影响,如证书的过期、吊销、篡改等,这将使数字证书不再具备可信性和安全性。
- 因此,CA需要定期更新CRL以记录吊销的数字证书。验证⼈员可以通过访问CRL来检查数字证书是否已被吊销。CRL的更新频率和验证⼈员的检查频率通常取决于数字证书的应⽤场景和安全级别
5.公钥和私钥(Public and Private Keys):
- 每个实体拥有⼀对密钥,公钥⽤于加密数据或验证数字签名,⽽私钥则⽤于解密数据或⽣成数字签名。公钥是公开的,⽽私钥必须保密
3.1.2 PKI的基本功能
- 认证 (Authentication):PKI 通过数字证书验证实体(如⽤户、设备、服务等)的身份,从⽽确保与之通信的对⽅是可信的。
- 数据完整性 (Data Integrity):PKI 通过数字签名确保数据在传输过程中未被篡改。任何篡改都会导致签名验证失败。
- 机密性 (Confidentiality):PKI 通过加密机制确保只有预期的接收者能够访问和解密信息,从⽽保护数据的机密性。
- 不可否认性 (Non-repudiation):PKI 的数字签名功能确保发送⽅⽆法否认其发送的数据或信息
3.2 数字证书
- 定义:数字证书是由 CA 签发的⼀个电⼦⽂档,它包含实体的公钥以及其他身份信息,如持有者的姓名、证书的有效期、证书序列号等。
- 证书格式:数字证书通常遵循 X.509 标准,该标准定义了证书的格式和内容。X.509 证书包括持有者的公钥、CA 的数字签名、持有者的身份信息等。
- 证书链:证书链是指从终端实体证书到根证书之间的⼀系列证书。通过验证证书链中的每个证书,最终可以信任终端实体证书
- 版本号 (Version)描述:定义了证书的版本。⽬前,最常⽤的是 v3(版本号为 2),这个版本增加了扩展字段的⽀持。
- 序列号 (Serial Number)描述:证书颁发机构(CA)分配给每个证书的唯⼀编号,⽤于唯⼀标识该证书。
- 签名算法标识符 (Signature Algorithm Identifier)描述:标识⽤于签署证书的算法,如 SHA-256 with RSA 加密。
- 颁发者 (Issuer)描述:证书颁发机构的身份信息,通常使⽤ X.500 标准格式表示,包括国家 (C),组织 (O),组织单位 (OU) 等字段
- 有效期:定义证书的有效时间段
- 主体:证书持有者的身份信息
- 主体公钥信息:包含主体的公钥及其所使用的算法信息
- 颁发者唯⼀标识符 (Issuer Unique Identifier) 和主体唯⼀标识符 (Subject Unique Identifier):这些字段在 v2 和 v3 证书中是可选的,⽤于唯⼀标识颁发者和主体,即使它们的名称相同,帮助解决证书更新或重发时可能的冲突
- 签名算法:重申用于签署证书内容的算法
- 签名:证书的数字签名,由 CA 使⽤其私钥对证书的前述部分进⾏签名⽣成,验证证书的完整性和来源。验证者可以使⽤ CA 的公钥来验证此签名
3.3 PKI工作流程
- 密钥对⽣成:实体⽣成⼀对密钥,公钥和私钥。公钥可以公开发布,⽽私钥必须保密。
- 证书申请:实体将其公钥连同身份信息发送给 RA,申请数字证书。
- 身份验证:RA 验证申请者的身份,确认⽆误后,将公钥和身份信息传递给 CA。
- 证书签发:CA 使⽤其私钥对申请者的公钥和身份信息进⾏签名,⽣成数字证书,并将证书返回给申请者。
- 证书分发:申请者可以将其数字证书公开给通信⽅。通信⽅可以通过访问证书存储库来获取证书。
- 证书使⽤:证书持有者使⽤其私钥进⾏加密或签名操作,通信⽅使⽤持有者的公钥解密或验证签名。
- 证书撤销:如果证书不再可信(例如私钥泄露),CA 可以将该证书加⼊ CRL,标记为已撤销
PKI的应用场景:
- 电⼦邮件安全 (S/MIME):使⽤数字证书对电⼦邮件进⾏加密和签名,以确保邮件的机密性和完整性。
- 安全套接字层/传输层安全 (SSL/TLS):在⽹络通信中使⽤数字证书来建⽴安全的加密通道,保护数据传输的机密性和完整性。
- 虚拟专⽤⽹络 (VPN):使⽤ PKI 来验证远程⽤户的身份,并建⽴加密的⽹络连接。
- 代码签名:开发者使⽤数字证书对软件代码进⾏签名,确保软件未被篡改,并验证发布者的身份。
- ⽂档签名:
- 使⽤ PKI 对⽂档进⾏数字签名,以确保⽂档的来源和完整性
四、HTTPS理论
4.1 SSL与TLS
4.1.1 SSL(Secure Sockets Layer)
SSL 是由 Netscape 公司于 1990 年代早期开发的,⽬的是为互联⽹通信提供加密和身份验证,特别是在电⼦商务和在线⽀付等需要保护敏感信息的场景中。
SSL 的⼯作过程可以分为三个主要阶段:握⼿、数据传输和连接关闭
1.握⼿阶段:
- 客户端Hello:客户端向服务器发送⼀个请求,包含客户端⽀持的SSL版本、加密套件、压缩⽅法以及⼀个随机数。
- 服务器Hello:服务器选择⼀个客户端⽀持的SSL版本和加密套件,返回给客户端,并发送其数字证书(包含公钥)以及⼀个随机数。
- 证书验证:客户端验证服务器的数字证书是否合法,确保与之通信的服务器是真实可信的。如果证书验证通过,客户端⽣成⼀个称为“预主密钥”(pre-master secret)的随机数,⽤服务器的公钥加密后发送给服务器。
- 密钥⽣成:服务器使⽤私钥解密“预主密钥”,然后客户端和服务器使⽤该“预主密钥”以及双⽅之前发送的随机数,⽣成会话密钥,⽤于后续的数据加密。
2.数据传输阶段:
- 客户端和服务器通过⽣成的会话密钥进⾏数据加密和解密,确保传输的数据保密且未被篡改。
3.连接关闭阶段:
- 通信结束后,客户端和服务器互相发送关闭通知,并销毁会话密钥,断开连接
4.1.2 TLS(Transport Layer Security)
背景与历史:TLS 是 SSL 的继任者,由 IETF(互联⽹⼯程任务组)开发,⽬的是改进 SSL 协议中的安全性漏洞。
TLS的工作原理:
TLS 的⼯作原理与 SSL 类似,但在安全性和效率上进⾏了改进。其过程也分为握⼿、数据传输和连接关闭三个阶段。
1.握⼿阶段:
- 与 SSL 类似,客户端发起连接请求,服务器回应并提供其数字证书。双⽅通过协商选择加密算法和会话密钥。
- TLS 1.3 引⼊了更快的握⼿过程,减少了所需的往返次数(RTT),从⽽降低了握⼿延迟。
2.数据传输阶段:
- TLS 使⽤会话密钥对数据进⾏加密,确保通信的保密性和完整性。
- TLS 1.2 和 1.3 ⽀持更强⼤的加密算法,如 AES-GCM,这些算法在保证安全的同时也提⾼了性能
3.关闭连接阶段:
- 在通信结束时,客户端和服务器会相互发送关闭通知,终⽌连接并销毁会话密钥
4.1.3 SSL 和 TLS 的主要区别
- 安全性:TLS 在安全性上有显著提升,修复了 SSL 的许多已知漏洞。SSL 3.0 被认为是不安全的,⽽现代⽹络应⽤⼏乎都使⽤ TLS 1.2 或 1.3。
- 加密算法:TLS 引⼊了更强⼤的加密算法和更灵活的加密套件配置,如⽀持 AES 和 SHA-256 等,⽽ SSL ⽀持的算法较为过时。
- 握⼿过程:TLS,特别是 TLS 1.3,在握⼿过程中的优化使其⽐ SSL 更加⾼效,减少了延迟。
- 协议扩展性:TLS 设计时考虑到了未来的扩展性,可以更容易地引⼊新特性或加密算法,⽽不影响现有的安全性
4.1.4 SSL 和 TLS 在现代⽹络中的应⽤
如今,⼏乎所有的 HTTPS ⽹站都依赖于 TLS 协议。虽然我们⽇常⽣活中经常听到“SSL证书”这个术语,但实际上,这些证书⼏乎总是⽤于TLS连接中。随着互联⽹的普及和安全意识的提⾼,TLS 1.2 和TLS 1.3 成为保护⽹络通信的标准
4.2 TLS
4.2.1 TLS协议总体结构
TLS 协议主要由两个⼦协议组成:
- TLS 记录协议(TLS Record Protocol):负责对数据进⾏分⽚、压缩、加密、解密和完整性检查。
- TLS 握⼿协议(TLS Handshake Protocol):负责客户端和服务器之间的身份验证、加密算法协商以及密钥交换。
除此之外,TLS 还包含两个辅助协议:
- TLS 警报协议(TLS Alert Protocol):⽤于在通信过程中发送错误消息或通知中⽌连接。
- TLS 变更密码规范协议(TLS Change Cipher Spec Protocol):⽤于通知对加密算法和密钥的使⽤进⾏切换
4.2.2 TLS握手协议
TLS 握⼿协议是建⽴安全连接的核⼼,主要负责双⽅身份验证、加密套件协商以及密钥交换。握⼿过程可以分为以下⼏个阶段:
1.客户端Hello(ClientHello)
客户端发起 TLS 连接时,会发送⼀个 ClientHello 消息,包含以下内容:
- ⽀持的 TLS 版本:客户端⽀持的 TLS 版本(如 TLS 1.2、1.3)。
- 随机数(Random):⼀个由客户端⽣成的随机数,⽤于后续密钥的⽣成。
- 会话ID(Session ID):如果客户端希望恢复之前的会话,则包含会话ID。
- ⽀持的加密套件(Cipher Suites):客户端⽀持的加密算法和哈希函数列表。
- 压缩⽅法(Compression Methods):客户端⽀持的压缩算法。
- 扩展字段(Extensions):包含额外的扩展信息,如服务器名称指示(SNI)、⽀持的签名算法、应⽤层协议协商(ALPN)等
2.服务器Hello(ServerHello)
服务器接收到 ClientHello 后,回复 ServerHello 消息,内容包括:
- TLS 版本:服务器选择的 TLS 版本。
- 随机数(Random):由服务器⽣成的随机数。
- 会话ID:如果服务器同意恢复会话,则返回相同的会话ID。
- 加密套件:服务器选择的加密算法和哈希函数。
- 压缩⽅法:服务器选择的压缩算法。
- 扩展字段:服务器⽀持的扩展信息
3.服务器证书(Server Certificate)
服务器通过 Certificate 消息发送其数字证书,该证书包含服务器的公钥和身份信息,由受信任的证书颁发机构(CA)签署。客户端使⽤此证书验证服务器的身份
4.服务器密钥交换(Server Key Exchange)(可选)
在某些加密套件(如 DHE 或 ECDHE)中,服务器需要通过 ServerKeyExchange 消息发送临时的公钥交换参数,以便进⾏ Diffie-Hellman 密钥交换
5.证书请求(Certificate Request)(可选)
如果服务器要求客户端身份验证,会发送 CertificateRequest 消息,要求客户端提供其数字证书。
6.服务器Hello完成(ServerHelloDone)
服务器发送 ServerHelloDone 消息,表示握⼿的初始阶段结束
7.客户端证书(Client Certificate)(可选)
如果服务器要求客户端提供证书,客户端会发送 Certificate 消息,包含其数字证书
8.客户端密钥交换(Client Key Exchange)
客户端⽣成⼀个称为“预主密钥”(Pre-Master Secret)的随机数,并使⽤服务器的公钥加密后,通过ClientKeyExchange 消息发送给服务器。服务器使⽤其私钥解密“预主密钥”,然后双⽅使⽤此预主密钥和之前交换的随机数⽣成会话密钥
9.证书验证(Certificate Verify)(可选)
如果客户端发送了证书,它还会发送 CertificateVerify 消息,使⽤其私钥对握⼿摘要进⾏签名,服务器通过验证签名来确认客户端的身份
10.变更密码规范(Change Cipher Spec)
客户端和服务器各⾃发送 ChangeCipherSpec 消息,通知对⽅接下来将使⽤协商好的加密套件和会话密钥进⾏通信
11.握⼿完成(Finished)(加密)
握⼿的最后⼀步,客户端和服务器各⾃发送 Finished 消息,包含整个握⼿过程的摘要,⽤协商好的密钥加密,以验证握⼿是否成功完成
4.2.3 TLS记录协议
TLS 记录协议是 TLS 协议的底层协议,负责将上层协议的数据分⽚、压缩、加密和完整性检查。记录协议的结构如下:
- 内容类型(Content Type):标识记录的类型,如应⽤数据(Application Data)、握⼿消息(Handshake)、警报(Alert)等。
- 协议版本(Protocol Version):TLS 版本号。
- ⻓度(Length):记录内容的⻓度。
- 记录数据(Record Data):实际的数据负载,可能是加密后的数据
4.2.4 TLS警报协议
TLS 警报协议⽤于在通信过程中通知错误或异常情况。警报消息分为两类:
- 警告(Warning):表示可以处理的错误,不需要⽴即关闭连接。
- 致命错误(Fatal Error):表示严重错误,连接将⽴即关闭。
常⻅的警报类型包括:
- 关闭通知(Close Notify):表示⼀⽅打算终⽌连接。
- 意外消息(Unexpected Message):收到不期望的消息。
- 解密失败(Decryption Failed):解密过程中发⽣错误。
- 证书过期(Certificate Expired):收到的证书已过期
4.2.5 TLS实际应用
TLS 是现代互联⽹中⾄关重要的协议,⼴泛应⽤于以下场景:
- HTTPS(HTTP Secure):通过 TLS 为 Web 流量提供加密和安全保护。
- 电⼦邮件传输:TLS ⽤于加密 SMTP、IMAP 和 POP3 等协议中的邮件传输。
- 虚拟专⽤⽹络(VPN):许多 VPN 协议使⽤ TLS 来确保数据传输的安全性。
- 即时通信:如 WhatsApp、Signal 等应⽤使⽤ TLS 来保护消息传输
实验、数字证书制作与HTTPS部署
步骤1:配置静态IP地址和DNS
- 配置静态IP地址:首先为服务器设置一个静态IP地址,确保服务器具有固定的IP地址和正确的DNS设置,以便在网络上稳定可靠地访问
- 确保DNS服务:验证DNS设置是否正确,确保域名能够解析到服务器的IP地址
在本实验中,可以使用本地回环地址(127.0.0.1),这样可以确保实验不会干扰到其他网络服务或设备,同时也避免了其他网络服务对实验环境的干扰
可以不设置网关,由于所有通信都是在本机进行的,数据包不会离开本地网络,因此不需要通过网关进行路由。不设置网关也简化了网络配置
为网站配置DNS,保证能够解析域名,反向也可以配置
步骤2:安装和配置WEB服务
- 安装WEB服务:在服务器上安装IIS(Internet信息服务)以托管网站
- 创建网站并测试:在IIS中创建一个新的网站,并使用HTTP协议访问,通过创建和测试网站,确保IIS服务已正确安装并且网站可以通过HTTP访问
安装WEB服务时,选择Web服务器中的安全性,并全部勾选,选择应用程序开发并部分勾选
创建网站并测试(提前在网站的文件夹下新建index.html以便观察现象),在这一步时,暂时不需要对端口做设置,类型也保持默认http
可以看到,网站成功访问,只是现在暂时还使用的是http协议
步骤3:安装和配置AD证书服务(AD CS)
- 安装AD证书服务:在服务器上安装Active Directory证书服务,这是⼀个Windows Server⻆⾊,提供公钥基础设施(PKI)服务,以便颁发和管理数字证书
- 配置AD CS:配置证书颁发机构(CA)的角色和服务,以便能够接收证书请求并颁发证书
现在,我们再来安装证书服务,在服务器角色中选择“Active Directory证书服务”,在角色服务中选择“证书颁发机构”和“证书颁发机构Web注册”
在安装完成后,会出现一个提示,提示你“配置证书服务”,点击进入进行证书配置
凭据保持默认的管理员,角色服务勾选“证书颁发机构”和“证书颁发机构Web注册”(在勾选完后左边会出现其他选项)
CA类型保持“根”,指定私钥类型选择“创建新的私钥”
在CA的加密页面,哈希算法我们选择“SHA256”
接下来的选项类似,保持默认即可,一路确认,至此,我们完成了AD CS配置
步骤4:生成和提交证书请求(CSR)
- 生成CSR文件:生成证书签名请求(CSR),这是申请数字证书的必要步骤,包含公钥和组织信息
- 提交CSR文件:将生成的CSR文件将提交给配置好的证书颁发机构(CA)
回到我们的网站,选择最大的根选项,选择“服务器证书”(注意:这里需要选择最上层的http://localhost才能看到证书选项,选择新建的网站是找不到的)
进入页面后右键选择“创建证书申请”。通用名称填写网站名称,后面的随便填,点击下一步
加密服务提供程序属性保持默认,下一步,文件名页面新建一个txt文件用来存储生成的证书请求。创建成功后,我们回到创建的位置就能看到生成的请求了
证书签名请求(Certificate Signing Request,CSR)是在公钥基础设施(Public Key Infrastructure,PKI)中用于生成数字证书的一个过程。当一个实体(如个人、公司或服务器)需要一个数字证书来证明其身份时,它会生成一个CSR。
CSR 通常以 -----BEGIN NEW CERTIFICATE REQUEST----- 开头,以 -----END NEW CERTIFICATE REQUEST----- 结束,中间是经过 Base64 编码的内容。这段内容会由 CA 验证,并签发相应的证书
步骤5:颁发证书并下载
- 颁发证书:由证书颁发机构(CA)处理CSR并颁发数字证书,该证书用于确保网站的安全性
- 下载证书:从CA下载颁发的数字证书,以便在服务器上进行安装和配置
打开浏览器访问http://127.0.0.1/certsrv,显示404访问不成功,这是因为我们没有打开默认站点(Default Web Site),将其打开后重新访问,成功访问
选择下面的“申请证书”,“高级证书申请”“使用base64”,将刚刚生成的申请粘贴过来
此步提交后如果没有反应可以换个浏览器试试,例如换成火狐。成功后会显示正式正在挂起,下一步就可以去服务器上颁发证书了
步骤6:在WEB服务器上部署证书
- 安装证书:在IIS管理器中,将下载的证书导⼊并绑定到相应的⽹站上。确保IIS配置使⽤该证书进⾏HTTPS通信
- 绑定证书到网站:在IIS中,选择⽹站并配置其绑定,选择HTTPS协议并绑定刚刚安装的证书
在服务器管理器中选择“工具”,“证书颁发机构”,选择“挂起的申请”,在这里可以看到我们刚刚申请的证书。右键选中,选择“所有任务”,“颁发”
这样,我们就为我们的网站颁发了一个证书
步骤7:发布并测试HTTPS访问
- 发布网站:配置网站以使用HTTPS协议,并通过SSL/TLS证书确保数据传输的安全
- 测试访问:打开浏览器访问您的⽹站,检查是否使⽤HTTPS协议,并确认证书是否有效和信任
回到http://127.0.0.1/certsrv,这次选择查看挂起的证书申请的状态,选择下载证书,得到一个安全证书文件
常⻅的数字证书⽂件扩展名有 .crt、.cer、.pem、.p12、.pfx
再回到服务器证书选项,选择“完成证书申请”,选择我们刚刚下载的证书
现在,我们可以继续我们第一步没做完的工作了,添加网站绑定:类型选择https,端口改为443,SSL证书选择我们刚刚设置的证书
再次访问我们的网站,发现现在协议变更为HTTPS
步骤8:后续管理和维护
- 包括证书的更新、撤销和监控,确保网站的HTTPS通信始终保持安全和有效。