yoA*_*ex5 15
签名、证书
电子签名
Digital signature
- 确保某些数据(如消息、文档、文件...)由预期方发送 - 验证完整性、真实性、不可否认性。数字签名可以附加到消息(数据是签名的一部分)或分离的[示例](数据不是签名的一部分,它们单独传输)。
//Create a signature by owner
1. owner of asymmetric key pair(private/public keys)
2. calculate a check sum of data: Message(M) -> Hash message by some hash algorithm -> message digest(MD1)
3. encode(**sign**) calculated check sum: encrypt message digest(MD1) by private key -> Digital signature(DS)
//Check a signature
1. calculate a check sum of data: Message(M) -> Hash message by some hash algorithm -> message digest(MD2)
2. decode(**verify**) digital signature: decrypt Digital signature(DS) by owner's public key -> message digest(MD1)
3. compare check sums from step 1 and 2: is MD2 == MD1
Run Code Online (Sandbox Code Playgroud)
数字证书
Certificate
- 是一个包含所有者的公钥和其他所有者信息的文件。该文件由证书颁发机构 (CA) 签名digital signature
- 整个证书转换为 .der 并计算哈希值
Subject - owner' data(from CSR)
Issuer - CA who issued a certificate
Serial Number - CA's unique identifier
Valid From/To
Public Key
Signature Algorithm
Signature Value
version
extension
//fingerprint - it is not a part of certificate, which is calculated by demand and can be used as unique identifier. It is a hash of the entire certificate in DER(.der) format
...
Run Code Online (Sandbox Code Playgroud)
证书颁发机构 (CA) 证书保证您的真实身份。
自签名证书是不是由证书颁发机构(CA)颁发的证书,其中主题名称等于颁发者名称。请注意,根证书是自签名的。
您可以在 Mac 上创建自签名证书:
Keychain Access -> Certificate Assistant -> Create a Certificate
Run Code Online (Sandbox Code Playgroud)
我的自签名证书.pem
-----BEGIN CERTIFICATE-----
MIIDIjCCAgqgAwIBAgIBATANBgkqhkiG9w0BAQsFADAvMSAwHgYDVQQDDBdteVNl
bGZTaWduZWRDZXJ0aWZpY2F0ZTELMAkGA1UEBhMCVUEwHhcNMjMwMjE4MTMyOTIz
WhcNMjQwMjE4MTMyOTIzWjAvMSAwHgYDVQQDDBdteVNlbGZTaWduZWRDZXJ0aWZp
Y2F0ZTELMAkGA1UEBhMCVUEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
AQDcMHHA0U2zk62XL698SdM2SmmZ6+sA0AsTb9MUx/tj3kNaOWBZEB82XGxoo09L
OlPgUJ94wMiLQ0JFYu4jDP6qb1ORUnIfI2SwuNQw61Xd+IpiP4hJG14KAGysUdc9
zEsA1PnWooLFdKDape/GdjSRGsr1vcTYBDWvjtYJrh0aXSGgWvo9zJ8snztqtRpJ
gn2JH0AR5RzJwdv8RYTGQdR5oQnUc8oaKCm2gCxWEmvdOkQyFoJQHw/kZgRKcMag
1wAofdDrESDINiih48r5cKqRD3R+y2MKlvVz0UoSAE5WqD1Oce4gnO90tpZv1ZlB
XxGAelLO8ZeZW+xG4wJad+XdAgMBAAGjSTBHMA4GA1UdDwEB/wQEAwIHgDAWBgNV
HSUBAf8EDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUTTfu7fJusZPrR/mlhfFh7Xhd
2rEwDQYJKoZIhvcNAQELBQADggEBAMNZ10eVU7dGpok1JkYOwYcFamzFFdL5GVYj
xM5+mkI4G9BfFQxbutZFbiC44Fidp4fCp+ED7OAGErSBML5M4QBIwhic0ix/lAj6
LF6ZTJy9lwNGtgLTi7KM8kbIhJxzppeuzuaD1C+ttOgugAd99jRyBmkHInGBPNQ2
R4xbgYh7/pNiWmkjxMTYrN8rQqPYvhZy3XMoNTZ7OjOy6851TDFLlsHU8ocJqkhY
Jdar1j7k4GqEqe4cjLNfaqHzQQcvVOPEYo96+bzB6JlH0hQLHrBMrTuOv+EfLK1J
ONvvR94pEFKTO7Vg5F/lx5o0KPbDavNcgacAU4EDjxR3rUmMeos=
-----END CERTIFICATE-----
Run Code Online (Sandbox Code Playgroud)
已验证证书是受信任证书链一部分的证书,其中根证书已添加到您的钥匙串(受信任存储)中(通过系统、浏览器、您...)
信任链(证书链) - 是用于验证颁发者的证书层次结构。该层次结构中的每个证书均由专利证书签署和颁发
Root(trust anchor) Certificate - [Intermediate(subordinate, issuing) Certificate] - End-user(end-entity, leaf, subscriber) Certificate
Run Code Online (Sandbox Code Playgroud)
Mac 钥匙串向您推荐下一个证书验证选项:
//System trust
This certificate is valid
//Manually added self-signed certificate and manually trusted
This certificate is masked as trusted for this account
//Manually added self-signed certificate
This certificate has not been verified by a third party
Run Code Online (Sandbox Code Playgroud)
验证/验证算法 - 由于子证书由父证书签名(使用父证书的私钥),而根证书是自签名的,并且每个子证书都有一个指向其父证书的链接(子证书的颁发者名称等于父证书的主题名称)和根证书的颁发者名称等于 root 的证书主题名称。这意味着最简单的方法(没有扩展及其约束)只是名称匹配。不要忘记根证书通常是预先下载的,中间证书和用户端证书通常是在握手期间下载的
Charles Proxy使用自签名证书通过中间人 (MITM) 代理嗅探流量 - Https ProxyServer
client - with added Charles Certificate and encrypt messages by Charles public key
Https ProxyServer - has Server's Certificate and proxy message and encrypt it by Server public key
Server
Run Code Online (Sandbox Code Playgroud)
SSL Pinning是一种机制,客户端在握手期间检查/验证检索到的证书并将其与本地副本进行比较,如果未验证则连接失败
[证书签名请求(CSR)] - 包含公钥和其他数据的信息,发送至CA
CA 证书是由证书颁发机构 (CA) 颁发的数字证书,因此 SSL 客户端(例如 Web 浏览器)可以使用它来验证此 CA 签署的 SSL 证书。
例如,stackoverflow.com 使用Let's Encrypt对其服务器进行签名,stackoverflow.com 发送的 SSL 证书提到它们是由Let's Encrypt签名的。您的浏览器包含来自Let's Encrypt的 CA 证书,因此浏览器可以使用该 CA 证书来验证 stackoverflow 的 SSL 证书,并确保您确实在与真实服务器对话,而不是中间人。
https://security.stackexchange.com/a/20833/233126提供了有关 TLS/SSL 证书如何工作的更详细说明。
大多数证书的费用不超过 800 美元,而诸如 Let's Encrypt 之类的 CA 是免费的(代价是增加了定期和经常续订的不便)
问题是为什么客户端会相信服务器是正确的服务器?答案是权威机构,即 CA,颁发和担保服务器证书。CA 以某种方式验证证书请求者。然后 CA 提供一个公共接口来验证证书的真实性。CA 必须让客户端知道,这是由 OS 实现的和/或在浏览器也可能具有嵌入式 CA 的情况下。
归档时间: |
|
查看次数: |
4591 次 |
最近记录: |