背景
2015年5月 HTTP/2 标准协议正式发布后,已得到绝大部分的浏览器的支持,但截止发文时使用的网站占比还不到1/3。
本文目的是为了快速搭建一个本地HTTP/2
服务,以供研发小伙伴开发测试,从而加深对HTTP/2
的理解。
环境
OpenSSL
:1.0.2q
Nginx
:1.15.7
步骤
- 生成本地根证书:
1 | # 使用AES256-bit编码加密生成4096位的根秘钥 |
各参数可以查看man ca
或者 查阅这里。
1 | # 使用根秘钥生成根证书 |
- 生成本地自签证书
1 | #生成自签秘钥 |
其中server.csr.cnf
:1
2
3
4
5
6
7
8
9
10
11
12
13
14[ req ]
default_bits = 2048
prompt = no
default_md = sha256
distinguished_name = req_distinguished_name
[ req_distinguished_name ]
C = CN
ST = Beijing
L = Beijing
O = MyOrganization
OU = MyOrganizationUnit
emailAddress = [email protected]
CN = localhost
v3.ext
:
1 | authorityKeyIdentifier=keyid,issuer |
- 配置nginx
将server.crt
和server.key
添加到nginx:1
2
3
4
5
6
7
8
9
10
11server {
listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;
ssl_certificate /etc/nginx/certs/server.crt;
ssl_certificate_key /etc/nginx/certs/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_session_cache shared:SSL:1m;
server_name localhost;
...
重启nginx:1
2sudo nginx -t
sudo nginx -s reload
- 信任自签证书
首次打开网页时,会提示证书无效,那么将自签的证书加入信任列表即可:
- Mac OS:
1 | sudo security add-trusted-cert -d -r trustAsRoot -k /Library/Keychains/System.keychain server.crt |
- Ubuntu:
1 | sudo cp server.crt /usr/local/share/ca-certificates/server.crt |
其他系统可以查阅这里。
此时打开浏览器可以看到:
说明自签证书已有效,并支持HTTP/2
服务。
总结
本文介绍了本地快速搭建HTTP/2
服务,希望对研发伙伴有所帮助。目前所有代码都已放到local-http2,喜欢的同学可以Star
:)。
还有HTTP/3草案已出,感兴趣的可以了解一下。