由于nginx早期版本有安全問題,需要升級版本。于是nginx升級成了docker,順便上了ssl證書,記錄一下操作過程。
一,證書合并
一般nginx的ssl證書,包含有一個key私鑰文件,一個crt公鑰證書文件。如果有chain.crt中間證書文件,可以將這個中間證書的內容cp出來,放到公鑰crt的后面即可。
中間證書的作用,參考url:https://www.myssl.cn/home/article-0403-22.html
為了保證Nginx可以兼容所有瀏覽器,我們必須在服務器上安裝中間證書,請到 中間證書下載工具,輸入您的Server.crt,然后下載中間證書,請將中間證書保存為Chain.crt。
我們需要將中間證書Chain.crt加入到服務器證書Server.crt文件中,請將Chain.crt中的所有內容復制,并粘貼到Server.crt,順序是: 第一段,服務器證書;第二段,中間證書,如下:
-----BEGIN CERTIFICATE-----
MIIEsTCCA5mgAwIBAgIDBfoqMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNVBAYTAlVT
………Server Certificate…………
T0hUGo/wiwTBUafyk1A+LlSUE+dYqzbHYV9Q4d83UIzz9vXO4wmSRgV0udjGN2GR
W7oiGmI=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEsTCCA5mgAwIBAgIDBfoqMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNVBAYTAlVT
………Chain Certificate…………
T0hUGo/wiwTBUafyk1A+LlSUE+dYqzbHYV9Q4d83UIzz9vXO4wmSRgV0udjGN2GR
W7oiGmI=
-----END CERTIFICATE-----
二,nginx conf更新
在想啟用ssl的server段,加上如下配置,實現https訪問,并自動從80端口跳轉。
listen 80;
listen 443 ssl;
server_name do.it.com.cn;
ssl_certificate /etc/nginx/conf.d/it.com.cn.crt;
ssl_certificate_key /etc/nginx/conf.d/it.com.cn.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
if ($server_port = 80) {
rewrite ^(.*)$ https://$host$1 permanent;
}
root /usr/share/nginx/html;
三,Dockerfile生成
如果nginx是作為后端代理用途,nginx的所有東東,最好固定無變化,保證性能和穩(wěn)定性。(那兩個證書文件copy的位置,要契合nginx.conf中配置的定位)
FROM it.com.cn/base/middleware/nginx:1.18-alpine
MAINTAINER 'It'
LABEL version="1.0"
COPY conf/nginx.conf /etc/nginx/
COPY conf/it.conf /etc/nginx/conf.d/
COPY conf/notice.conf /etc/nginx/conf.d/
COPY conf/jenkins.conf /etc/nginx/conf.d/
COPY ssl/it.com.cn.key /etc/nginx/conf.d/
COPY ssl/it.com.cn.crt /etc/nginx/conf.d/
COPY html /usr/share/nginx/html
RUN rm -rf /etc/nginx/conf.d/default.conf \
&& chmod -R 755 /usr/share/nginx/html \
&& echo "finished."
四,啟動命令
方便日常維護
#/bin/sh
docker run -itd \
--name do-it \
-p 80:80 -p 443:443 \
it.com.cn/it/https-do-it:nginx-1.18-alpine
五,測試
略。。。