GithubHelp home page GithubHelp logo

ywdblog / httpsbook Goto Github PK

View Code? Open in Web Editor NEW
86.0 8.0 34.0 666 KB

《深入浅出HTTPS:从原理到实战》代码示例、勘误、反馈、讨论

Home Page: https://www.simplehttps.com

book https ssl certificates cryptography tls openssl letsencrypt

httpsbook's Introduction

本仓库关于我的新书《深入浅出HTTPS:从原理到实战》,和这本书的一切都可以讨论。

1:本书代码示例

2:勘误可查看或提交到 errata.md

3:如果想了解这本书,可以查看 《我的书》

《深入浅出HTTPS:从原理到实战》

4:如果想了解我,可以查看 《我是谁》

5:我的公众号(ID:yudadanwx,虞大胆的叽叽喳喳) ,我会持续性更新,包含密码学&HTTPS相关信息。

公众号

6:本书购买地址

httpsbook's People

Contributors

gxlct008 avatar ywdblog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

httpsbook's Issues

6.7.10 校验 OCSP 套装

演示的两个网站地址颠倒了,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%

一點問題

嗯,在書的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

P31弱抗碰撞性与强抗碰撞性的关系

书中说“具备弱抗碰撞性的算法也具备强抗碰撞性”,这里是不是说反了?一般来说破解强抗碰撞性更难一些。根据网上一些资料,强抗碰撞要通过散列值直接找到两个不同的消息,而弱抗碰撞是在已知一个消息体和对应散列值后,找到另一个消息,可能反复尝试修改消息体本身就能找到。不知道我的理解是否有误,还请您指正

勘误

先记录一下,多了在 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
预备主密钥的生成和服务器关系密钥(更:服务器密钥关系)并不大
服务器(更:客户端)接收到服务器发送的相关参数后

unable to access simplehttps.com

Unable to access simplehttps.com. there is no DNS record.
You can reply me in chinese, I just haven't install pinyin input method.

227页 6.7.9小节 校验 OCSP 命令无法执行

我的 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" 后执行成功。

6.7.3 获取线上证书语法错误

  1. 下载 GitHub 站点的服务器证书链:
$ openssl s_client -connect www.github.com:443 -shwocerts 2>&1 </dev/null \
  | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
  > www_fullchain.pem
  1. 执行拆分操作存在错误输出:
# 将证书链文件拆分成各个文件
$ 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

命名行提示输出步骤存在语法错误,请问如何解决?

P25的不可预测性定义反了

P25:“有些随机数看上去很随机,但是这些随机数之间可能存在一定的关联,比如通过以前的随机数可以推断出后续的随机数,这种随机数就具备不可预测性”。这里是否应该为“具备可预测性”?

HOST头描述错误

第七页HOST描述错误,HOST只对客户端有用,HOST对服务器也有用,虚拟主机也通过HOST进行区分客户端访问的网站。

通过域名DNS解析IP地址这个示例不够准确,这个过程和解析和HTTP没什么关系吧。

217页 校验CSR签名内命令

原命令

openssl req -in myreq.pem -noout -verify -key example_csr.pem

是不是应为

openssl req -in example_csr.pem -noout -verify
  • -key 参数后面应该为私钥文件
  • 信息参考 linux man req 内的 verify 的例子

EDH & DHE

在2.8.3小结中提到了:临时DH算法(EDH算法)。
在10.4.1小结中又看到了: 9)设置DHE密码套件的密钥。

开始我还以为是作者写错了,谷歌一下发现EDH和DHE说的是一个算法:
Ephemeral Diffie-Hellman 又写做 Diffie-Hellman ephemeral。

不过还是希望作者稍微提示一下,省的我这种门外汉不知其所以然: )

关于网络模型的图

在1.3网络模型的第一个图1-3,这个图

image
拆包流程中,由底层到高层协议的箭头指向是否改个方向更加贴合实际,网络数据包往上的过程中,每经过一层协议就拆一层包。
image

HOST头描述错误

第七页HOST描述错误,HOST只对客户端有用,HOST对服务器也有用,虚拟主机也通过HOST进行区分客户端访问的网站。

通过域名DNS解析IP地址这个示例不够准确,这个过程和解析和HTTP没什么关系吧。

6.7.5 校验 CSR 签名

书中「校验 CSR 签名」章节中,OpenSSL 命令的两个参数错误,应修改如下:

$ openssl req -in example_csr.pem -noout -verify -key example_key.pem

小小勘误

在第二章第七节(密钥)的第二部分(口令和PEB算法,63页)的标题行(口令和PEB算法)似乎应该是PBE?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.