前言
為了加密傳輸http的數(shù)據(jù)墩蔓,我們需要用到https證書攘烛。免費的證書有l(wèi)ets‘s encrypt舶赔。
使用nginx配置轉(zhuǎn)發(fā)
我們需要在服務(wù)器上配置nginx湃交,使得lets's encrypt能夠驗證我們的域名熟空。
下面是我的服務(wù)器nginx的配置文件
server {
listen 80;
server_name www.unrealblue.cc;
location / {
return 301 https://$host$request_uri;
}
location ~ /.well-known/acme-challenge {
root /var/www/html;
allow all;
}
}
說明:第一個location意思是轉(zhuǎn)發(fā)所有的80請求到https連接。第二個請求的意思是搞莺,如果訪問.well-known息罗,則使用我們提供的/var/www/html目錄。
將文件保存為default.conf才沧。
這里我使用了nginx docker來部署迈喉,所以沒有安裝nginx。
FROM nginx
LABEL MAINTAINER linanwx@gmail.com
RUN apt update
RUN apt install -y certbot
RUN mkdir -p /var/www/html
COPY ./default.conf /etc/nginx/conf.d/
EXPOSE 80:80
EXPOSE 443:443
VOLUME ["/etc/letsencrypt/"]
將第一個代碼段存為default.conf糜工,第二個代碼段存為dockerfile弊添,然后運行docker build -t nginx-server .
運行docker run -it --rm -d -p80:80 -p443:443 --net=server-net --name nginx-server -v $PWD/letsencrypt:/etc/letsencrypt nginx-server
啟動容器并在后臺運行。
生成證書
運行docker exec -it nginx-server /bin/bash
進入容器內(nèi)部捌木。
運行下面的命令生成證書
openssl dhparam -out /etc/letsencrypt/live/dhparams.pem 2048
certbot certonly --agree-tos -a webroot --webroot-path=/var/www/html -d www.unrealblue.cc -m linanwx@gmail.com
certbot程序會訪問你的域名油坝,來確認你的域名所有權(quán)是你,這就用到了上一步操作的nginx的配置刨裆。其中還有一些參數(shù)澈圈,查看help可以知道含義。另外帆啃,除非你確認要部署到服務(wù)器上瞬女,否則在測試階段使用--test-cert參數(shù)來進行測試。因為證書生成是有數(shù)量限制的努潘。
另外一點就是生成dhparam诽偷。他是迪菲-赫爾曼秘鑰交換協(xié)議參數(shù),生成時間較長疯坤。之后我們會在nginx中使用這個报慕。
不出意外你會獲得證書,他們存在/etc/letsencrypt/目錄下压怠。并且眠冈,由于在容器啟動的時候使用了掛卷,證書會出現(xiàn)在宿主機中菌瘫。
配置nginx https
新建一個文件蜗顽,命名為http.conf
# http://www.reibang.com/p/f7f39cb24423
server {
listen 443 ssl;
server_name www.unrealblue.cc;
ssl_certificate /etc/letsencrypt/live/www.unrealblue.cc/fullchain.pem;
ssl_trusted_certificate /etc/letsencrypt/live/www.unrealblue.cc/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.unrealblue.cc/privkey.pem;
ssl_dhparam /etc/letsencrypt/live/dhparams.pem;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_session_timeout 1d;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=60;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
# location = /gfwlist {
# proxy_pass http://server-handy:8081;
# }
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
將其保存布卡。然后修改dockerfile如下:
FROM nginx
LABEL MAINTAINER linanwx@gmail.com
RUN apt update
RUN apt install -y certbot
RUN mkdir -p /var/www/html
COPY ./default.conf /etc/nginx/conf.d/
COPY ./https.conf /etc/nginx/conf.d/
EXPOSE 80:80
EXPOSE 443:443
VOLUME ["/etc/letsencrypt/"]
這里將這個http.conf也一同復(fù)制進去了。
重新啟動容器雇盖,訪問https://127.0.0.1忿等,可以看到訪問成功了。
在本地環(huán)境測試的時候會提示證書不正確刊懈。
點繼續(xù)这弧。