IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> docker构建nginx双向认证https服务器(实战) -> 正文阅读

[系统运维]docker构建nginx双向认证https服务器(实战)

目录

Dockerfile文件编写

Docker构建与运行

opessl 双向认证证书生成

nginx配置文件

测试运行结果

源码地址


?本文地址:https://arv000.blog.csdn.net/article/details/125331698

为快速构建nginx的双向认证服务器,我们使用构建docker镜像方式搭建,原始项目中包含了国密认证部分,文章仅介绍双向自签名的构建,因此在运行builddocker.sh脚本时我们只是用到了功能“7”

本文介绍了docker的构建脚本、docker的运行脚本、https双向认证自签名脚本、生成根证书、服务器证书、客户端证书。

使用dockerfile构建docker镜像方便又快捷。

项目文件列表

文件类型文件名称说明
文件builddocker.sh构建和运行docker的bash脚本
文件Dockerfile_D_RSA构建双向认证的duckerfile文件。
目录rsa_dnginx双向认证相关的配置文件
文件rsa_d/index.htmlweb服务首页,方便测试人员下证书
文件rsa_d/gm_rsa_confignginx配置双向认证tls文件
文件rsa_d/build_ca.sh

使用openssl命令构建服务器证书,根证书,客户端证书。

目录gm_tarnginx源码包,以及openssl源码包
文件gm_tar/nginx-1.18.0.tar.gz
文件gm_tar/gmssl_openssl_1.1_b6.tar.gz

Dockerfile文件编写

关于dockerfile的编写规则可以看一下文章

地址:->? ??docker使用逃过不的Dockerfile

Dockerfile_D_RSA文件内容

# 基础镜像
FROM centos:7
LABEL maintainer="arv003@163.com"
# 修改环境变量,将nginx运行程序的环境变量添加到path
ENV PATH /usr/local/nginx/sbin:$PATH
# 上传国密openssl压缩包
ADD gm_tar/gmssl_openssl_1.1_b6.tar.gz /usr/local
# 上传nginx压缩包
ADD gm_tar/nginx-1.18.0.tar.gz /root
# 下载安装编译nginx依赖程序(注意需要联网)
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre unzip openssl && yum clean all

# 编译nginx
WORKDIR /root/nginx-1.18.0  
RUN  sed -i 's/$OPENSSL\/\.openssl/$OPENSSL/g' auto/lib/openssl/conf
RUN ./configure --without-http_gzip_module \
--with-http_ssl_module \ 
--with-http_stub_status_module \
--with-http_v2_module \
--with-file-aio \
--with-openssl="/usr/local/gmssl" \
--with-cc-opt="-I/usr/local/gmssl/include" \
--with-ld-opt="-lm"
# 安装nginx
RUN make install

# 配置nginx配置文件
WORKDIR /root/
ADD rsa_d/build_ca.sh /root/
# 生成双向自签名证书
RUN /bin/bash -c "bash build_ca.sh"
RUN cp /root/client/kehuduan.p12 /usr/local/nginx/html/
ADD rsa_d/index.html /root/
RUN rm -f /usr/local/nginx/html/index.html
RUN mv /root/index.html /usr/local/nginx/html/
ADD rsa_d/gm_rsa_config /root
RUN sed -i '$d' /usr/local/nginx/conf/nginx.conf
RUN cat  /root/gm_rsa_config  >>  /usr/local/nginx/conf/nginx.conf
RUN echo "" >> /usr/local/nginx/conf/nginx.conf
RUN echo "}" >> /usr/local/nginx/conf/nginx.conf
# 启动nginx
CMD /bin/sh -c 'nginx -g "daemon off;"'

# 指定docker开放
EXPOSE 80
EXPOSE 443

Docker构建与运行

  • 构建

默认的Dockerfile文件就叫这个名字,但是我们可以通过指定dockerfile文件进行构建(-f)。

sudo docker build -f Dockerfile_D_RSA -t gm_d_rsa:1.0 .
  • 运行

docker run命令运行docker镜像,为使得运行容器不冲突,我们可以先使用docker stop停止容器运行,docker rm删除容器。

# 暂停docker容器
sudo docker stop gm_d_rsa
# 删除docker容器
sudo docker rm gm_d_rsa
# docker容器
sudo docker run  -d --restart=always --name=gm_d_rsa -p 8086:80 -p 8448:443 gm_d_rsa:1.0

--name:指定运行容器的名字。

-p: 指定宿主机和容器的端口绑定关系。

gm_d_rsa:1.0:构建镜像时的镜像名称。

  • 查看

sudo docker ps -a ::查看所有的容器

sudo docker ps : 查看运行的容器

sudo docker rm :删除容器

docker命令可以查看文件->?docker入门精髓?

opessl 双向认证证书生成

注释在以下代码中写得比较清楚

#!/bin/bash
# 构建自签名证书以及客户端证书.
# 构建之前需要安装openssl
PROJECT_NAME="TLS Project"


# 构建根证书
function build_ca_cert(){
	# 一、 制作ca自签名证书 
	## step 1 生成私钥,
	openssl genrsa -out ca_private.pem 2048
	
	## step 2 制作自签名证书
	openssl  req -new -x509 -key ca_private.pem -out ca.crt -config ./ca_cert.conf 

	#openssl x509 -req -in root.csr -out root.crt -signkey ca.key -CAcreateserial -days 3650 -config ./ca_cert.conf

}
# 构建服务端证书
function build_server_cert()
{
	# 二、准备服务器证书
	
	## step 1 构建服务器私钥
	openssl genrsa -out server.key 1024
	
	## step 2 制作服务端服务器证书申请指定
	openssl req -new -key server.key -sha512 -out server.csr -config ./server_cert.conf
	
	## step 3 签署证书
	
	openssl x509 -req -in server.csr -out server.crt  -CAcreateserial  -days 3650   -CA ../ca/ca.crt -CAkey ../ca/ca_private.pem 
}

# 构建客户端证书
function build_client_cert(){

	# 三、 准备客户端证书(导入到浏览器)
	
	## step 1 制作客户端私钥
	openssl genrsa -out kehuduan.key 1024 
	
	## step 2 制作客户端申请证书
	openssl req -new -key kehuduan.key -out kehuduan.csr -config ./client_cert.conf
	
	## step 3 签署客户端证书
	openssl x509 -req -in kehuduan.csr -out kehuduan.crt  -signkey kehuduan.key   -CAcreateserial  -days 3650  -CA ../ca/ca.crt -CAkey ../ca/ca_private.pem 
	

	## step 4 生成你客户端p12格式证书,用于导入浏览器
	openssl pkcs12 -export -clcerts -in kehuduan.crt -inkey kehuduan.key -out kehuduan.p12 -passin pass:123456 -password pass:123456


}

#  构建根证书配置文件
function build_ca_config(){
cat > ca_cert.conf << EOF
[ req ]
distinguished_name=req_distinguished_name
prompt=no

[ req_distinguished_name ]
O=$PROJECT_NAME
CN=www.gmtest.cn
EOF

}

#  构建服务端证书配置文件
function build_server_config(){

cat > server_cert.conf << EOF
[ req ]
distinguished_name=req_distinguished_name
prompt=no

[ req_distinguished_name ]
O=$PROJECT_NAME
CN=www.gmtest.cn
EOF

}

# 构建客户端证书配置文件
function build_client_config(){
cat > client_cert.conf << EOF
[ req ]
distinguished_name=req_distinguished_name
prompt=no

[ req_distinguished_name ]
O=$PROJECT_NAME
CN=www.gmtest.cn
EOF
}
##################################### main #######################################


# 构建根证书
rm -rf ca
mkdir ca
cd ca
build_ca_config
build_ca_cert

cd ..

# 构建服务器证书
rm -rf server
mkdir server
cd server
build_server_config
build_server_cert

cd ..

# 构建客户端证书
rm -rf client
mkdir client
cd client
build_client_config
build_client_cert

nginx配置文件

在nignx.conf文件中添加如下配置

server
{
  listen 0.0.0.0:443 ssl;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-RC4-SHA:!ECDHE-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDHE-RSA-AES256-SHA:!RC4-SHA:HIGH:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!CBC:!EDH:!kEDH:!PSK:!SRP:!kECDH;
  ssl_verify_client on;
  # 配置服务器证书
  ssl_certificate /root/server/server.crt;
  # 配置服务器私钥
  ssl_certificate_key /root/server/server.key;
  # 配置客户端证书
  ssl_client_certificate /root/client/kehuduan.crt;
  location /
  {
    root html;
    index index.html index.htm;
  }
}

测试运行结果

浏览器中访问:

# 可以通过这地址下载客户端证书,以及提示证书密码。
http://127.0.0.1:8086

htts://127.0.0.1:8448
  • 下载客户端证书

访问url地址?http://127.0.0.1:8086

下载客户端证书?

证书密码为:123456

点击客户端下载可以直接下载客户端证书。

  • 导入客户端证书

将客户端证书导入浏览器中,一般在浏览器的设置->隐私安全模块。

选中下载的客户端证书

??

  • 访问双向认证服务器

在访问双向认证服务器时,浏览器会提示用户选择客户端证书。

选择正确的证书?

?访问结果

源码地址

源码下载:docker构建nginx双向认证https服务器

本文地址:https://arv000.blog.csdn.net/article/details/125331698

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-06-26 17:06:53  更:2022-06-26 17:08:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/30 2:25:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码