首页 > 其他分享 >Docker-Remote-API未授权认证-开启TLS认证

Docker-Remote-API未授权认证-开启TLS认证

时间:2022-12-12 22:37:07浏览次数:55  
标签:TLS Remote etc ca 认证 pem key docker server

0x01 Docker Remote API认证

  • 通过采用TLS/SSL证书来确保用户与API之间连接的安全。

0x02 建立证书授权中心

  • 本次环境使用Centos 7.6
  • 1.确认操作系统是否安装了openssl
  • which openssl
  • 2.默认情况下可以在宿主机的目录/etc/docker下存储相关CA证书和其他信息。
  • ls /etc/docker
  • 3.进入上述的目录,生成一个私钥,创建私钥的过程中为CA密钥设置一个密码
  • cd /etc/docker
  • echo 01 | tee ca.srl
  • openssl genrsa -des3 -out ca-key.pem
  • 上述操作完毕后会生成两个文件,分别为ca.srl和ca-key.pem
  • 4.开始创建CA证书
  • openssl req -new -x509 -days 365 -key ca-key.pem -out ca.pem
  • 期间会让输入一些信息,根据实际情况填写即可。
  • 完成之后会生成ca.pem文件。

0x03 创建服务器的证书签名请求和秘钥

  • 通过使用新的CA来为Docker服务器进行证书签名请求(Cerificate signing request,CSR)和密钥的签名和验证。
  • 1.为Docker服务器创建一个秘钥,在创建过程中是需要输入刚才上面创建的密钥的密码。
  • openssl genrsa -des3 -out server-key.pem
  • 最终会生成 server-key.pem
  • 2.创建服务器的证书签名请求(CSR)
  • 这里同样是要输入上面server-key.pem秘钥的密码。
  • 期间需要输入信息,这里就都直接回车好了。
  • 需要注意的地方,这里创建的过程中有个Common Name (FQDN)要输入为通配符* 意思是允许在任何服务器上使用这个服务器证书。
  • openssl req -new -key server-key.pem -out server.csr
  • 最终会生成文件 server.csr
  • 3.对CSR进行签名并生成服务器证书,此处需要输入CA密钥文件的密码(创建ca-key.pem文件时的密码,这里在整个创建的过程中,推荐使用同一个密码,避免混淆)。
  • openssl x509 -req -days 365 -in server.csr -CA ca.pem -CAkey ca-key.pem -out server-cert.pem
  • 最终会生成文件server-cert.pem
  • 4.此步骤是为了清除服务器密钥的密码,目的是不想再Docker守护进程启动的时候再次输入密码,所以需要清除它。
  • sudo openssl rsa -in server-key.pem -out server-key.pem
  • 5.更改生成后需要用到文件的权限,做严格的权限控制。
  • chmod 0600 /etc/docker/server-key.pem /etc/docker/server-cert.pem /etc/docker/ca-key.pem /etc/docker/ca.pem

0x04 配置Docker守护进程

  • 现在有了证书和秘钥,就可以来配置Docker守护进程使用了。
  • 当前使用的docker版本如下:
  • Docker version 18.09.6, build 481bc77
  • 1.下面操作实际测试过程启动docker失败,这里也展示出来。
  • vim /lib/systemd/system/docker.service
  • ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2376 --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem
  • 因为上述操作有问题,最终测试是通过写入配置文件,成功启动docker。
  • 保持/lib/systemd/system/docker.service目录下的文件内容不变,不更改下面信息
  • ExecStart=/usr/bin/dockerd --default-ulimit core=0:0
  • 编辑下面文件,载入配置文件
  • vim /etc/docker/daemon.json
  • 最终内容如下:
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"hosts": [
"tcp://0.0.0.0:2376",
"unix:///var/run/docker.sock"
],
"tls": true,
"tlscacert": "/etc/docker/ca.pem",
"tlscert": "/etc/docker/server-cert.pem",
"tlskey": "/etc/docker/server-key.pem",
"tlsverify": true,
"iptables": false,
"bridge": "none"
}
  • 2.完成上述操作之后,重启Docker服务,再重启Docker守护进程,然后查看是否成功
  • systemctl daemon-reload
  • systemctl restart docker
  • systemctl status docker.service

Docker-Remote-API未授权认证-开启TLS认证_Docker

Docker-Remote-API未授权认证-开启TLS认证_docker_02

0x05 创建客户端证书和密钥

  • 这里只是为了测试,所以我这里就直接把客户端要做的操作也在服务端做了,在同一台机器上操作。
  • 1.创建客户端密钥,同样输入一个密码
  • openssl genrsa -des3 -out client-key.pem
  • 最终会生成文件 client-key.pem
  • 2.创建客户端CSR,此时需要输入上面创建的client-key.pem的密码
  • 其他需要输入的一些信息直接敲击回车即可
  • openssl req -new -key client-key.pem -out client.csr
  • 3.通过添加一些扩展的客户端SSL认证属性,来开启密钥的客户端身份认证,下面操作使用root权限操作。
  • echo extendedKeyUsage = clientAuth > extfile.cnf
  • 最终会生成文件extfile.cnf
  • 4.使用CA对客户端CSR进行签名
  • 使用CA密钥的密码创建另一个证书:client-cert.pem
  • 同样需要输入密码
  • openssl x509 -req -days 365 -in client.csr -CA ca.pem -CAkey ca-key.pem -out client-cert.pem -extfile extfile.cnf
  • 最终会生成文件client-cert.pem
  • 5.清除的密码
  • openssl rsa -in client-key.pem -out client-key.pem

0x06 配置Docker客户端开启认证功能

  • 1.执行下面命令将其复制到家目录下面的.docker目录下,如果没有就事先创建好文件.docker
  • cd /root
  • mkdir .docker
  • cp ca.pem /root/.docker/ca.pem
  • cp client-key.pem /root/.docker/key.pem
  • cp client-cert.pem /root/.docker/cert.pem
  • chmod 0600 /root/.docker/key.pem /root/.docker/cert.pem
  • ls /root/.docker/
  • 2.执行客户端连接服务端,看是否正常,验证是否成功。
  • docker -H=localhost:2376 --tlsverify info

Docker-Remote-API未授权认证-开启TLS认证_安全_03

迷茫的人生,需要不断努力,才能看清远方模糊的志向!



标签:TLS,Remote,etc,ca,认证,pem,key,docker,server
From: https://blog.51cto.com/u_5139878/5932044

相关文章

  • OpenLDAP 系列5 --- 启用TLS
    一、准备1.首先需要为OpenLDAP签发证书:https://www.cnblogs.com/eagle6688/p/16974768.html2.将CA证书、OpenLDAP证书和OpenLDAP密钥复制到OpenLDAP目录中:cp-vc......
  • JWT认证
    目录1、构成2、原理3、校验3、drf项目的jwt认证开发流程4、drf简单使用jwt安装继承AbstractUser表创建超级用户简单使用简单认证使用5、使用jwt自定制认证类基于BaseJSONWe......
  • 认证-Authentication
    目录认证Authentication1、认证的写法2、认证的源码分析3、认证组件的使用全局配置局部使用局部禁用认证Authentication1、认证的写法#认证的实现-1.写一个类,继承Base......
  • webstorm | Outdated | IDEA License Server Detected过期的问题(自己搭建认证服务器的
    自己搭建认证服务器的教程这里我只是个搬运工,归档员。方法一、具体的参加链接:​​http://idea.lanyus.com/​​自己根据上面的链接地址,可以自行构建自己的LicenseServer。......
  • 《云原生入门级开发者认证》学习笔记之云原生基础设施之容器技术
    写在前面嗯,报了考试,整理课堂笔记记忆学习的原因:虽然考了​​CKA​​​,了解了一些​​K8s​​相关的知识但是对​​云原生​​整个体系一直都很模糊希望对云原生有一个......
  • 亚马逊便携式火炉ASTM F3363-19认证标准
    亚马逊便携式火炉烧烤炉ASTMF3363-19认证标准烧烤炉是一种烧烤设备,可以用来做烤羊肉串、烤肉、烤蔬菜等烧烤食品。烧烤炉根据加热源的不同可以分为木炭烧烤炉、燃气烧......
  • 英国UKCA认证玩具测试报告
    什么是UKCA认证?UKCA是英国合格认定(UKConformityAssessed)的简称.2019年2月2日,英国公布了在无协议脱欧的情况下将会采用UKCA标志方案。2021年1月1日之后,开始正式实施新标......
  • vscode Remote-SSH 相关问题
    1.远程连接时一直提示重复输入密码在vscode菜单栏里点击"查看"->"命令面板"输入remote-ssh:killvscodeserveronhost选择连接有问题的host重新输入密码即......
  • ssh_exchange_identification: Connection closed by remote host
     出现这个是因为我的本地mac电脑没有开启ssh共享服务点击电脑设置-共享-开启远程控制就好了。[email protected]自己本地的服务端和......
  • fastapi身份认证
    官方文档FastApi提供了OAuth2PasswordBearer类对OAuth2中的password授权模式提供了支持。一、实现逻辑创建OAuth2PasswordBearer实例并指明tokenurl(认证用户获取tok......