快速搭建本地HTTP/2服務

NeoLu發表於2018-12-24

背景

2015年5月 HTTP/2 標準協議正式釋出後,已得到絕大部分的瀏覽器的支援,但截止發文時使用的網站佔比還不到1/3。 本文目的是為了快速搭建一個本地HTTP/2服務,以供研發小夥伴開發測試,從而加深對HTTP/2的理解。

環境

  1. OpenSSL: 1.0.2q
  2. Nginx: 1.15.7

步驟

  1. 生成本地根證書:
# 使用AES256-bit編碼加密生成4096位的根祕鑰
openssl genrsa -aes256 -out rootCA.key 4096

Enter pass phrase for rootCA.key: password
Verifying - Enter pass phrase for rootCA.key: password
複製程式碼

各引數可以檢視man ca 或者 查閱這裡

# 使用根祕鑰生成根證書
openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

Enter pass phrase for rootCA.key: password
You are about to be asked to enter information that will be incorporated
...
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Lovecoding.org
Organizational Unit Name (eg, section) []:Lovecoding CA
Common Name (e.g. server FQDN or YOUR name) []:Lovecoding ROOT CA
Email Address []:
Generating a RSA private key
複製程式碼
  1. 生成本地自簽證書
#生成自籤祕鑰
openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config server.csr.cnf

#生成自簽證書
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 600 -sha256 -extfile v3.ext
複製程式碼

其中server.csr.cnf:

[ 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 = lovecoding@example.com
CN           = localhost
複製程式碼

v3.ext:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names

[alt_names]
DNS.1=localhost
複製程式碼
  1. 配置nginx

server.crtserver.key新增到nginx:

server {
        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:

sudo nginx -t
sudo nginx -s reload
複製程式碼
  1. 信任自簽證書

首次開啟網頁時,會提示證書無效,那麼將自籤的證書加入信任列表即可:

  • Mac OS
sudo security add-trusted-cert -d -r trustAsRoot -k /Library/Keychains/System.keychain server.crt
複製程式碼
  • Ubuntu:
sudo cp server.crt /usr/local/share/ca-certificates/server.crt
sudo update-ca-certificates
複製程式碼

其他系統可以查閱這裡

此時開啟瀏覽器可以看到:

快速搭建本地HTTP/2服務

說明自簽證書已有效,並支援HTTP/2服務。

總結

本文介紹了本地快速搭建HTTP/2服務,希望對研發夥伴有所幫助。目前所有程式碼都已放到local-http2,喜歡的同學可以Star :)。 還有HTTP/3草案已出,感興趣的可以瞭解一下。

參考

相關文章