在idea中一键部署项目到Docker及CA认证

不使用 CA 认证的方法在 这里

本文直接开始介绍使用 CA 认证远程连接 docker,不使用 CA 认证也行,在自己的虚拟机里面可以这么干,但是放到联网的服务器上就不建议这么做了,原因是,你把2375端口暴露在外面,意味着别人随时都可以提取到你服务器的root权限,是很容易被黑客黑的(笔者就是被当成了矿机的一例QwQ)。因此,docker官方推荐使用加密的tcp连接,以Https的方式与客户端建立连接

官方demo

下面就根据笔者的操作进行记录

在 idea 中一键部署的操作我就不再赘述了,如果有不会的小伙伴可以到[这里](%5Bhttps://juneblog.online/articles/2020/01/13/1578924660386.html%5D(https://juneblog.online/articles/2020/01/13/1578924660386.html)来看,前面的步骤都是一样的,区别在后面我会标记出来以便查看。

1.创建ca文件夹

mkdir -p /usr/local/ca
cd /usr/local/ca/

2.创建 CA 私钥和公钥

创建密码
openssl genrsa -aes256 -out ca-key.pem 4096

输出

...................++
..........................................................................................................................................................................................................................................................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:  # 此处输入密码Verifying - Enter pass phrase for ca-key.pem: # 此处输入密码
依次输入密码、国家、省、市、组织名称等
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

输出

Enter pass phrase for ca-key.pem:
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:zj
Locality Name (eg, city) [Default City]:hz
Organization Name (eg, company) [Default Company Ltd]:qdsg
Organizational Unit Name (eg, section) []:qdsg
Common Name (eg, your name or your server's hostname) []:qdsg
Email Address []:1@qq.com
生成 server-key.pem
openssl genrsa -out server-key.pem 4096

输出

Generating RSA private key, 4096 bit long modulus...........................++................++e is 65537 (0x10001)
把下面的$Host换成你自己服务器外网的IP或者域名
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
比如
openssl req -subj "/CN=192.168.1.106" -sha256 -new -key server-key.pem -out server.csr
或
openssl req -subj "/CN=www.baidu.com" -sha256 -new -key server-key.pem -out server.csr

我这里使用阿里云服务器进行测试

openssl req -subj "/CN=121.40.176.56" -sha256 -new -key server-key.pem -out server.csr
配置白名单

也就是你接下来要允许那些ip可以连接到服务器的docker,因为已经是ssl连接,所以我推荐配置0.0.0.0,也就是所有ip都可以连接(但只有拥有证书的才可以连接成功),这样配置好之后公司其他人也可以使用。如果你不想这样,那你可以配置ip,用逗号分隔开。下面的$Host依旧是你服务器外网的IP或者域名,请自行替换。

注意!!!!这里我踩了坑
如果你填写的是ip地址的话命令如下echo subjectAltName = IP:HOST,IP:0.0.0.0>>extfile.cnf如果你填写的是域名的话命令如下echosubjectAltName=DNS:HOST,IP:0.0.0.0 >> extfile.cnf 如果你填写的是域名的话命令如下 echo subjectAltName = DNS:HOST,IP:0.0.0.0>>extfile.cnf如果你填写的是域名的话命令如下echosubjectAltName=DNS:HOST,IP:0.0.0.0 >> extfile.cnf

这里我使用ip

echo subjectAltName = IP:121.40.176.56,IP:0.0.0.0 >> extfile.cnf
执行命令,将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证
 echo extendedKeyUsage = serverAuth >> extfile.cnf
执行命令,并输入之前设置的密码,生成签名证书
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf

输出

Signature ok
subject=/CN=192.168.1.106
Getting CA Private Key
Enter pass phrase for ca-key.pem: # 此处输入密码
生成客户端的key.pem,到时候把生成好的几个公钥私钥拷出去即可
openssl genrsa -out key.pem 4096

输出

Generating RSA private key, 4096 bit long modulus
...........................................................................................................................................................................................................................................................................................................................................................................++
......................................................................................................................................++
e is 65537 (0x10001)
执行命令
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
执行命令,要使密钥适合客户端身份验证,请创建扩展配置文件
echo extendedKeyUsage = clientAuth >> extfile.cnf
生成cert.pem,需要输入前面设置的密码,生成签名证书
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf

输出

Signature ok
subject=/CN=client
Getting CA Private Key
Enter pass phrase for ca-key.pem: # 此处输入密码
删除不需要的文件,两个证书签名请求
rm -v client.csr server.csr

输出

rm:是否删除普通文件 "client.csr"?y
已删除"client.csr"
修改权限,要保护您的密钥免受意外损坏,请删除其写入权限。要使它们只能被您读取,更改文件模式
chmod -v 0400 ca-key.pem key.pem server-key.pem

输出

mode of "ca-key.pem" changed from 0644 (rw-r--r--) to 0400 (r--------)
mode of "key.pem" changed from 0644 (rw-r--r--) to 0400 (r--------)
mode of "server-key.pem" changed from 0644 (rw-r--r--) to 0400 (r--------)
证书可以是对外可读的,删除写入权限以防止意外损坏
chmod -v 0444 ca.pem server-cert.pem cert.pem

输出

mode of "ca.pem" changed from 0644 (rw-r--r--) to 0444 (r--r--r--)
mode of "server-cert.pem" changed from 0644 (rw-r--r--) to 0444 (r--r--r--)
mode of "cert.pem" changed from 0644 (rw-r--r--) to 0444 (r--r--r--)

3. docker 及 idea 的配置

归集服务器证书
cp server-*.pem  /etc/docker/
cp ca.pem /etc/docker/
# 以上两步操作都在ca文件夹内,如果当前不在ca文件夹,需加上路径
修改Docker配置,使Docker守护程序仅接受来自提供CA信任的证书的客户端的连接
vim /lib/systemd/system/docker.service

添加如下代码到配置文件中

          --tlsverify --tlscacert=/etc/docker/ca.pem \--tlscert=/etc/docker/server-cert.pem \--tlskey=/etc/docker/server-key.pem \-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \

重新加载daemon并重启docker
systemctl daemon-reload
systemctl restart docker
开放2375端口,我用的是阿里云服务器,所有到安全组里去开放端口
/sbin/iptables -I INPUT -p tcp --dport 2376 -j ACCEPT
查看信息
 iptables-save

输出 (这里每个人输出的可能都不一样,但不影响)

# Generated by iptables-save v1.4.21 on Mon Feb  3 17:03:02 2020
*nat
:PREROUTING ACCEPT [310:18366]
:INPUT ACCEPT [172:10086]
:OUTPUT ACCEPT [3256:251253]
:POSTROUTING ACCEPT [3299:253557]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 3306 -j MASQUERADE
-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 443 -j MASQUERADE
-A POSTROUTING -s 172.17.0.3/32 -d 172.17.0.3/32 -p tcp -m tcp --dport 80 -j MASQUERADE
-A POSTROUTING -s 172.17.0.4/32 -d 172.17.0.4/32 -p tcp -m tcp --dport 12345 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 3306 -j DNAT --to-destination 172.17.0.2:3306
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 443 -j DNAT --to-destination 172.17.0.3:443
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.3:80
-A DOCKER ! -i docker0 -p tcp -m tcp --dport 12345 -j DNAT --to-destination 172.17.0.4:12345
COMMIT
# Completed on Mon Feb  3 17:03:02 2020
# Generated by iptables-save v1.4.21 on Mon Feb  3 17:03:02 2020
*filter
:INPUT ACCEPT [13385:2320047]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [34319:6861761]
:DOCKER - [0:0]
:DOCKER-ISOLATION - [0:0]
-A INPUT -p tcp -m tcp --dport 2375 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2376 -j ACCEPT
-A FORWARD -j DOCKER-ISOLATION
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A DOCKER -d 172.17.0.2/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 3306 -j ACCEPT
-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 443 -j ACCEPT
-A DOCKER -d 172.17.0.3/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 80 -j ACCEPT
-A DOCKER -d 172.17.0.4/32 ! -i docker0 -o docker0 -p tcp -m tcp --dport 12345 -j ACCEPT
-A DOCKER-ISOLATION -j RETURN
COMMIT
# Completed on Mon Feb  3 17:03:02 2020
重启 docker
service docker restart
保存相关客户端的pem文件到本地

这里我使用的是 lrzsz(Linux服务器和window互传文件工具)传的,使用方法可以参考这里

sz ca.pem cert.pem key.pem

idea 的配置

注意!如果没有将 tcp 替换成 https 将会出现 IOE 异常,届时请检查以下配置是否正确!

总结:之前笔者是没有使用 CA 认证且直接开放 2375 端口进行 idea 一键部署,之后各种不速之客纷纷来我服务器进行参观,啃食我的cpu,让我服务器的运行速度直接-99999,我是花了好大的力气才把他们全赶出去了,差点就 reset 服务器了,也是这次血的教训让我才意识到服务器安全的重要性。

本文参考自点我的博客,并以自己的实践进行记录,感谢原博主!!

有什么问题大家可以在下面评论区进行交流

Docker使用CA认证相关推荐

  1. Docker开启TLS和CA认证

    前言:Docker直接开启2375端口是不安全的,别人只要连上之后就可以任意操作,下面是开启Docker的TLS和CA认证方法,并使用Jenkins和Portainer连接. 一.生成证书 查看服务器 ...

  2. docker开放2375端口设置TLS和CA认证

    最近使用idea的docker插件,这个插件我们可以使用tcp的方式连接,但是这种连接方式非常不安全,开放的2375端口非常容易给人入侵,然后整个docker被人控制,这是非常危险的,所以为了解决这个 ...

  3. 长文详解!Docker客户端与服务端TLS认证(Docker Remote API认证)

    一.Docker Remote API的认证 在前一篇文章我们介绍了Docker Remote API如何使用:https://blog.csdn.net/qq_41453285/article/de ...

  4. 互联网协议 — TLS — CA 认证

    目录 文章目录 目录 基本概念 PKI CA 机构 X.509 标准 数字证书的结构 数字证书的类型 数字证书的格式 CA 证书认证流程 浏览器 CA 认证流程 基本概念 PKI PKI(Public ...

  5. Openssl搭建私有CA认证

    概述 CA英文全称Certification Authority,即数字证书认机构.从广义上来说,CA是负责发放和管理数字证书的权威机构,并作为用户数字认证中受信任的第三方,承担公钥体系(PKI)中公 ...

  6. LNMP与CA认证的童话故事

    在前面的一篇博客中,我已经介绍过,如何通过源码编译安装LAMP,见教你源码编译制作LAMP详细过程 ,这里就介绍下如何编译安装LNMP,以及如何在LNMP中添加ssl认证. LNMP,也叫做LEMP. ...

  7. 『高级篇』docker之安全认证kubernetes命令熟悉(40)

    原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『高级篇』docker之安全认证kubernetes命令熟悉(40) 安全版的kubernetes集群我们部署完成了. 下面我 ...

  8. 浏览器获取CA认证流程

    首先说说证书的签发过程: 服务方 S 向第三方机构CA提交公钥.组织信息.个人信息(域名)等信息并申请认证: CA 通过线上.线下等多种手段验证申请者提供信息的真实性,如组织是否存在.企业是否合法,是 ...

  9. 大型企业CA认证系统部署应用案例解析

    国内某上市公司信息化起步较早,应用系统主要分布于总公司.局公司.处公司三级单位.已经初步实现OA系统的信息整合,信息化工作进一步将围绕信息流.工作流的整合,项目管理系统的建立以及公共基础安全平台建设展 ...

  10. CA认证简单介绍和工作流程

    CA是证书的签发机构,它是PKI的核心.CA是负责签发证书.认证证书.管理已颁发证书的机关.它要制定政策和具体步骤来验证.识别用户身份,并对用户证书进行签名,以确保证书持有者的身份和公钥的拥有权..  ...

最新文章

  1. vue入门总结(3)
  2. 图论(六)图的两种表示方法
  3. ABAP中P类型介绍
  4. r矢量球坐标系旋度_矢量与场论 | 场论
  5. 一起学习linux之lamp脚本
  6. Java字符串替换(replace)
  7. 谷歌浏览器怎么长截图怎么截_Chrome浏览器如何完美实现滚动截图技巧
  8. ThickBox在ASP.NET中的应用
  9. 282.给表达式添加运算符
  10. 中兴新支点国产操作系统下载安装WPS办公软件,好用无广告
  11. 【无人机组装与调试】第一章 概述
  12. CAD快速测量面积与周长
  13. greenplum(gp)postgre清理pg_xlog释放空间
  14. Excel取消自动行高调整(取消自动换行)
  15. 大学生体育运动网页设计模板代码 DIV布局校园运动网页作业成品 HTML学校网页制作模板 学生简单体育运动网站设计成品
  16. 永中office linux卸载,永中office2012forLinux的安装卸载
  17. 模拟数字接口及调制解调器
  18. sql语句实现查询实例
  19. 电脑插了耳机,外放还有声音-解决办法
  20. (附源码)spring boot跨境电商系统 毕业设计 211003

热门文章

  1. 蚂蚁课堂二期视频(每特学院二期)
  2. WPS 2019使用技巧及WPS2019政府版最全合集
  3. 操作系统概念 第九版 Operating System Concepts, 9th Edition 中文译稿(不定时更新)
  4. 数据库系统概论-绪论
  5. Java SE书籍推荐
  6. java生成密码字典
  7. pyqt5写一个抽奖程序(再次美化)
  8. 计算机网络原理 实验2《Windows Socket编程》
  9. android视频播放器排行榜,安卓视频播放器哪个好 五款主流视频播放器对比
  10. 易语言卷帘菜单与json_易语言卷帘式菜单加背景图片源码