自签名ca证书
首先创建cert文件夹保存证书。
mkdir cert
cd cert
然后创建配置文件cert.cnf,注意如果时ip自签名就在your_IP填写自己的ip,如果是自签名域名就是在your_domain写自己的域名。
[dn]下CN字段是ca根服务器地址,alt_names下是ca验证的ip和域名地址,一般情况下这两个是一样的。
[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
根据配置文件生成证书。
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镜像。
docker pull nginx
新建一个容器获取config文件。
docker run -d --name nginx nginx
docker cp nginx:/etc/nginx/nginx.conf ./nginx.conf
docker stop nginx
docker rm nginx
在config文件的http内加入如下内容。
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://$your_proxy_ip:$your_proxy_port;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Accept-Encoding gzip;
}
}
使用nginx反向代理。
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
#测试配置文件
docker exec nginx nginx -t
#更新nginx配置
docker exec nginx nginx -s reload