ywdblog / httpsbook Goto Github PK
View Code? Open in Web Editor NEW《深入浅出HTTPS:从原理到实战》代码示例、勘误、反馈、讨论
Home Page: https://www.simplehttps.com
《深入浅出HTTPS:从原理到实战》代码示例、勘误、反馈、讨论
Home Page: https://www.simplehttps.com
嗯,在書的p416頁說推薦使用NIST P-256作為ecdsa證書的ecc橢圓曲線 可是P-256已被證明是不安全的(留有後門)
ecc安全鑒定可見
https://safecurves.cr.yp.to/index.html
對於ECDSA我會傾向於
Ed25519 和 Ed448
ECDHE為
x25519 和 x448
但如果真的要部署一個https網站
(也考慮兼容性)到底應該選擇那一條曲線
(對於 ECDSA 和 ECDHE)
還有,TLS1.2出現了兩個新漏洞,分別是Zombie POODLE 和GOLDENDOODLE(CVE)
它們都是POODLE攻擊的變種。那麼這是否意味著在配置tls密碼套件是時應該徹底禁用CBC套件?(tls1.2)
詳情見
https://www.cnbeta.com/articles/tech/817497.htm
在第二章第七节(密钥)的第二部分(口令和PEB算法,63页)的标题行(口令和PEB算法)似乎应该是PBE?
先记录一下,多了在 fork 提 PR。
1.
P1
分析 HTTPS(更:HTTP) 不安全的根本原因
2.
P2
通过(更:通常) HTTP 开发者不用额外创建通信规则
3.
P3
URL 的官方名称叫做统一资源标识符(更:URL 是统一资源定位符,URI 是统一资源标识符,这一节应该是 HTML、URI、HTTP)
4.
P25
这种随机数就具备(更:不具备)不可预测性
5.
P30
一旦(如果)该值和下载页面标识的 MD5 值是一致的
6.
P31
强抗碰撞性和弱抗碰撞性是(更:不是)相对的概念
7.
P38
先通过图 2-4 了解加密过程。将密文(更:明文)拆分成多个数据块...
8.
P40
先通过图 2-6 了解加密过程。将密文(更:明文)拆分成多个数据块...
9.
P377
预备主密钥的生成和服务器关系密钥(更:服务器密钥关系)并不大
服务器(更:客户端)接收到服务器发送的相关参数后
P25:“有些随机数看上去很随机,但是这些随机数之间可能存在一定的关联,比如通过以前的随机数可以推断出后续的随机数,这种随机数就具备不可预测性”。这里是否应该为“具备可预测性”?
第七页HOST描述错误,HOST只对客户端有用
,HOST对服务器也有用,虚拟主机也通过HOST进行区分客户端访问的网站。
通过域名DNS解析IP地址
这个示例不够准确,这个过程和解析和HTTP没什么关系吧。
Unable to access simplehttps.com. there is no DNS record.
You can reply me in chinese, I just haven't install pinyin input method.
友情链接让人受益颇多,那些尘封在时间里的程序员,写在博客里面。向那些敬业热爱技术的程序员学习。
$ openssl s_client -connect www.github.com:443 -shwocerts 2>&1 </dev/null \
| sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
> www_fullchain.pem
# 将证书链文件拆分成各个文件
$ cat www_fullchain.pem | awk 'split_after==1{n++;split_after=0} \
/-----END CERTIFICATE-----/ {split_after=1} \
{print > "www_cert" n ".pem"}'
awk: syntax error at source line 3
context is
{print > "www_cert" >>> n <<< ".pem"}
awk: illegal statement at source line 3
命名行提示输出步骤存在语法错误,请问如何解决?
第七页HOST描述错误,HOST只对客户端有用
,HOST对服务器也有用,虚拟主机也通过HOST进行区分客户端访问的网站。
通过域名DNS解析IP地址
这个示例不够准确,这个过程和解析和HTTP没什么关系吧。
书中「校验 CSR 签名」章节中,OpenSSL 命令的两个参数错误,应修改如下:
$ openssl req -in example_csr.pem -noout -verify -key example_key.pem
我的 OpenSSL 版本信息为:OpenSSL 1.0.2k-fips 26 Jan 2017
原命令:
# 校验 OCSP
$ openssl ocsp -issuer chain.pem -cert cert.pem -CAfile chain.pem \
-no_nonce --text -url http://ocsp.int-x3.letsencrypt.org \
-header Host=ocsp.int-x3.letsencrypt.org
报错。将--text
改为 -text
后还是无法执行。然后根据谷歌到的这篇文章中的线索,将-header Host=ocsp.int-x3.letsencrypt.org
改为 -header "Host" "ocsp.int-x3.letsencrypt.org"
后执行成功。
书中说“具备弱抗碰撞性的算法也具备强抗碰撞性”,这里是不是说反了?一般来说破解强抗碰撞性更难一些。根据网上一些资料,强抗碰撞要通过散列值直接找到两个不同的消息,而弱抗碰撞是在已知一个消息体和对应散列值后,找到另一个消息,可能反复尝试修改消息体本身就能找到。不知道我的理解是否有误,还请您指正
演示的两个网站地址颠倒了,baidu.com 不支持 OCSP 封套,letsencrypt.org 支持 OCSP 封套。因此需要修改如下:
使用不支持 OCSP 封套的 HTTPS 网站进行演示:
$ openssl s_client -connect www.baidu.com:443 -status -tlsextdebug < /dev/null 2>&1 \
| grep -i "OCSP response"
使用支持 OCSP 封套的 HTTPS 网站进行演示:
$ openssl s_client -connect letsencrypt.org:443 -status -tlsextdebug < /dev/null 2>&1
实测命令行如下:
$ openssl s_client -connect www.baidu.com:443 -status -tlsextdebug < /dev/null 2>&1 \
| grep -i "OCSP response"
OCSP response: no response sent
$ openssl s_client -connect letsencrypt.org:443 -status -tlsextdebug < /dev/null 2>&1
CONNECTED(00000005)
TLS server extension "renegotiation info" (id=65281), len=1
0001 - <SPACES/NULS>
TLS server extension "EC point formats" (id=11), len=4
0000 - 03 00 01 02 ....
TLS server extension "session ticket" (id=35), len=0
TLS server extension "status request" (id=5), len=0
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = www.letsencrypt.org
verify return:1
OCSP response:
======================================
OCSP Response Data:
OCSP Response Status: successful (0x0)
Response Type: Basic OCSP Response
Version: 1 (0x0)
Responder Id: C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
Produced At: May 3 22:10:00 2019 GMT
Responses:
Certificate ID:
Hash Algorithm: sha1
Issuer Name Hash: 7EE66AE7729AB3FCF8A220646C16A12D6071085D
Issuer Key Hash: A84A6A63047DDDBAE6D139B7A64565EFF3A8ECA1
Serial Number: 03E1CE2C0324F9CA93417FC8886F87F34857
Cert Status: good
This Update: May 3 22:00:00 2019 GMT
Next Update: May 10 22:00:00 2019 GMT
Signature Algorithm: sha256WithRSAEncryption
0d:de:d1:a8:f7:d2:20:19:76:dd:29:47:19:c1:07:ed:4e:8f:
fb:4f:9f:10:2f:b7:c7:74:43:17:27:61:9f:b8:f5:d9:76:f1:
49:b0:ee:b3:14:a9:a9:e0:9b:78:86:79:db:47:d6:21:04:e5:
ef:d4:9d:a9:98:0c:e0:7c:3d:08:4c:34:7b:ba:59:0e:f9:29:
81:c8:dc:ec:76:f4:29:e3:9f:56:27:bb:0b:8d:4e:a1:7e:75:
51:55:b2:04:79:0f:4e:be:f1:9d:69:d8:60:49:90:4f:de:d6:
33:e0:45:e9:cd:0b:97:01:d8:ee:cf:2f:d1:4c:40:bb:b0:26:
cf:b4:bf:fb:02:2e:7a:8f:f1:87:a4:29:ef:6e:0f:df:e2:78:
cd:3a:b6:8d:c7:8c:d4:31:83:eb:63:28:98:1f:bd:ee:8f:03:
fe:42:97:79:3a:20:4e:d4:9b:f6:e3:b4:2e:ad:df:83:6f:3a:
d4:53:e0:e3:a1:0d:a5:79:4c:4d:b0:3e:03:e6:7e:9d:2c:4c:
83:65:e7:08:b0:86:71:c7:d0:57:41:3c:3d:6a:83:00:e5:57:
51:f8:13:50:8a:21:5a:69:68:c7:6b:c4:96:e9:6c:b1:b9:82:
c1:a1:c7:04:3f:c2:d0:dd:4e:20:1c:51:b3:55:8e:11:d4:a8:
e3:c4:7c:d0
======================================
---
Certificate chain
0 s:/CN=www.letsencrypt.org
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIHMjCCBhqgAwIBAgISA+HOLAMk+cqTQX/IiG+H80hXMA0GCSqGSIb3DQEBCwUA
MEoxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MSMwIQYDVQQD
ExpMZXQncyBFbmNyeXB0IEF1dGhvcml0eSBYMzAeFw0xOTA1MDMyMTEwMjZaFw0x
OTA4MDEyMTEwMjZaMB4xHDAaBgNVBAMTE3d3dy5sZXRzZW5jcnlwdC5vcmcwggEi
MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCiJVoMxjBUFBa/qCfgulvNK8kP
9HcXYlgOi7K81iUQW6Pe8aGVfTD7e3HpWKFGR9BgKUL+3K9s1Ig5L0VkzGh1JPfi
+Ug+9oEq2Cy7hDDQwV0hEmORyv1dm2Q9UTh2D6L564YD0JxtYxJrWRrKTprrK1jQ
ogsHKWa1NGDOI1w2zvGNUF6XsRme8dJwC4SNUiNiScovQ2R9w6OafQNs+7CbgDgA
KmPa/xSnK14x9pXeim2RS8GObJunPxBRaOyfRHwO6WIvxE89G2ZQFQBi8MK1Q28y
sVKm5R9/y4AH5eGuedGCOyXUTu9pdHreqcaYNSDgaIh8lLacJ4AJhYwpYrDNAgMB
AAGjggQ8MIIEODAOBgNVHQ8BAf8EBAMCBaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEG
CCsGAQUFBwMCMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFMuUbU8b5LCmNdHbve0D
mMr0c724MB8GA1UdIwQYMBaAFKhKamMEfd265tE5t6ZFZe/zqOyhMG8GCCsGAQUF
BwEBBGMwYTAuBggrBgEFBQcwAYYiaHR0cDovL29jc3AuaW50LXgzLmxldHNlbmNy
eXB0Lm9yZzAvBggrBgEFBQcwAoYjaHR0cDovL2NlcnQuaW50LXgzLmxldHNlbmNy
eXB0Lm9yZy8wggHxBgNVHREEggHoMIIB5IIbY2VydC5pbnQteDEubGV0c2VuY3J5
cHQub3JnghtjZXJ0LmludC14Mi5sZXRzZW5jcnlwdC5vcmeCG2NlcnQuaW50LXgz
LmxldHNlbmNyeXB0Lm9yZ4IbY2VydC5pbnQteDQubGV0c2VuY3J5cHQub3Jnghxj
ZXJ0LnJvb3QteDEubGV0c2VuY3J5cHQub3Jngh9jZXJ0LnN0YWdpbmcteDEubGV0
c2VuY3J5cHQub3Jngh9jZXJ0LnN0Zy1pbnQteDEubGV0c2VuY3J5cHQub3JngiBj
ZXJ0LnN0Zy1yb290LXgxLmxldHNlbmNyeXB0Lm9yZ4ISY3AubGV0c2VuY3J5cHQu
b3JnghpjcC5yb290LXgxLmxldHNlbmNyeXB0Lm9yZ4ITY3BzLmxldHNlbmNyeXB0
Lm9yZ4IbY3BzLnJvb3QteDEubGV0c2VuY3J5cHQub3Jnghtjcmwucm9vdC14MS5s
ZXRzZW5jcnlwdC5vcmeCD2xldHNlbmNyeXB0Lm9yZ4IWb3JpZ2luLmxldHNlbmNy
eXB0Lm9yZ4IXb3JpZ2luMi5sZXRzZW5jcnlwdC5vcmeCFnN0YXR1cy5sZXRzZW5j
cnlwdC5vcmeCE3d3dy5sZXRzZW5jcnlwdC5vcmcwTAYDVR0gBEUwQzAIBgZngQwB
AgEwNwYLKwYBBAGC3xMBAQEwKDAmBggrBgEFBQcCARYaaHR0cDovL2Nwcy5sZXRz
ZW5jcnlwdC5vcmcwggEDBgorBgEEAdZ5AgQCBIH0BIHxAO8AdgDiaUuuJujpQAno
hhu2O4PUPuf+dIj7pI8okwGd3fHb/gAAAWp/v6MgAAAEAwBHMEUCIGrZoFnKmmYt
Omx+B0sKmyRBbeiSJQwGFYDETJswjpVAAiEA0BkcBEGR/r6787vEDHwuhCmOuavs
7YybVaoj8lmVx1YAdQApPFGWVMg5ZbqqUPxYB9S3b79Yeily3KTDDPTlRUf0eAAA
AWp/v6U0AAAEAwBGMEQCIFIxbMPE6RDnputd6t3Z1lthJ2vWRjIxNkPw5BkhlVOj
AiB4rr/jnUUdquBrNbL2jUghUktMi59oIGFv6HSgXVkweDANBgkqhkiG9w0BAQsF
AAOCAQEAUzzOcatp5xJBPnSm5Wa/d7JAM8fV/LBvAmLTdNb0Udk4w3QXdTMCN06K
EooTZFoOBe2ae1SIbqDDFFW19OEt0veSlLdJGE7CZgTW7mxdvERXuhhKw4dYtSmd
YOz/ukuNt/xaQxOD2B+4NRYkmr1kxvApZVOJSCduLXmYCw7EFWNXAojeeuDT3dOG
/9/GpOFVOywu7JpgvZwUgeymSU206Z7igxVvCTFN9Hwl2ddeXqT061efa4a9v62H
75sbpxaBKztrZMJdWukmtuyND1MV2+zhVUF6he87nVtrpzmvyfwCdnCH+N7h2LlB
cJLo338k0DUgi+b4PSIxUQIn5NBTGg==
-----END CERTIFICATE-----
subject=/CN=www.letsencrypt.org
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 4237 bytes and written 335 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-GCM-SHA384
Session-ID: EFDCAF717B3A840A2E3A9808F90028B29F2B8CD6CEEF52AC5CAE92E67D7C14ED
Session-ID-ctx:
Master-Key: C758A1EEA29D5051A00E74FDA649AE7A3DC84370563763B41FAAD3136D22C5F2BED802065E4FB3664C95EE35D0D4172D
TLS session ticket lifetime hint: 7200 (seconds)
TLS session ticket:
0000 - 00 00 0c e0 5e 86 4b e0-d7 0f a8 8e 1f f3 89 41 ....^.K........A
0010 - 8a 16 c0 33 f1 69 c7 38-d7 9a f7 93 bc 15 2f 8a ...3.i.8....../.
0020 - d2 56 85 27 3d 0a 98 1c-04 91 ed d8 0c f4 87 23 .V.'=..........#
0030 - 2c 1f 1f 61 fc d3 63 57-34 19 33 bb 2a 17 0f a0 ,..a..cW4.3.*...
0040 - 30 51 7d ef db fc e7 b3-57 64 64 f8 6b 36 0b f5 0Q}.....Wdd.k6..
0050 - 38 93 77 9e bb 12 f0 1a-75 d6 47 6b dc 8b 49 de 8.w.....u.Gk..I.
0060 - 51 9a d1 bd e0 00 5f e8-8c f7 48 0e b9 03 07 73 Q....._...H....s
0070 - b6 33 a8 9b 35 3e a1 43-06 7e 63 be 26 16 35 c1 .3..5>.C.~c.&.5.
0080 - 99 56 d5 15 f1 47 c9 e9-3d c9 89 d9 d4 1c 00 6b .V...G..=......k
0090 - f8 e6 0f e6 96 8c 4e ee-94 2e 6d 9a f6 04 e1 8f ......N...m.....
00a0 - c3 5e c9 6a f0 2d bc e3-84 21 47 c5 b1 65 cb ff .^.j.-...!G..e..
Start Time: 1557485338
Timeout : 7200 (sec)
Verify return code: 0 (ok)
---
poll error%
2.5.5 AD 加密模式,
可是从内容看,是不是应该是“AE 加密模式”呢?
P代表伪,应该为Pseudo,书中印刷的是Preudo。虽然问题不大,但还是告诉您一声
在2.8.3小结中提到了:临时DH算法(EDH算法)。
在10.4.1小结中又看到了: 9)设置DHE密码套件的密钥。
开始我还以为是作者写错了,谷歌一下发现EDH和DHE说的是一个算法:
Ephemeral Diffie-Hellman 又写做 Diffie-Hellman ephemeral。
不过还是希望作者稍微提示一下,省的我这种门外汉不知其所以然: )
原命令
openssl req -in myreq.pem -noout -verify -key example_csr.pem
是不是应为
openssl req -in example_csr.pem -noout -verify
-key
参数后面应该为私钥文件man req
内的 verify 的例子A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.