自签名ca证书
首先创建cert文件夹保存证书。
然后创建配置文件cert.cnf,注意如果时ip自签名就在your_IP填写自己的ip,如果是自签名域名就是在your_domain写自己的域名。
[dn]下CN字段是ca根服务器地址,alt_names下是ca验证的ip和域名地址,一般情况下这两个是一样的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| [req] prompt = no default_bits = 4096 default_md = sha256 distinguished_name = dn x509_extensions = v3_req
[dn] C=CN ST=Shanghai L=Shanghai O=TEST OU=Testing Domain CN=$your_IP or $your_domain emailAddress=admin@localhost
[v3_req] basicConstraints=CA:TRUE keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage=serverAuth subjectAltName=@alt_names
[alt_names] IP.1=$your_IP DNS.1=$your_domain
|
根据配置文件生成证书。
1
| openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout cert.key -out cert.crt -config cert.cnf
|
当前目录下生成两个文件cert.crt和cert.key,至此自签名步骤完成。
nginx反向代理
docker拉取nginx镜像。
新建一个容器获取config文件。
1 2 3 4
| docker run -d --name nginx nginx docker cp nginx:/etc/nginx/nginx.conf ./nginx.conf docker stop nginx docker rm nginx
|
在config文件的http内加入如下内容。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| server{ listen 443 ssl; server_name $your_ip or website;
ssl_certificate /cert/cert.crt; ssl_certificate_key /cert/cert.key;
ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法 ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议 ssl_prefer_server_ciphers on; #使用服务器端的首选算法
location / { proxy_pass http: proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Accept-Encoding gzip; } }
|
使用nginx反向代理。
1
| docker run -d --restart=always -p $your_port:443 --name nginx -v "$PWD"/nginx.conf:/etc/nginx/nginx.conf -v "$PWD"/cert:/cert nginx
|
更新nginx
1 2 3 4
| docker exec nginx nginx -t
docker exec nginx nginx -s reload
|