由于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的所有东东,最好固定无变化,保证性能和稳定性。(那两个证书文件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
五,测试
略。。。