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-Remote-API未授权认证-开启TLS认证_安全_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

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

mac开发flutter的时候在手机安装app需要ios开发证书吗 flutter还需要ios开发吗

首先,Flutter是一个优秀的跨 IOS/Android 开发平台。 Flutter是一款移动应用程序SDK,一份代码可以同时生成iOS和Android两个高性能、高保真、表现一致的应用程序。 Flutter目标是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序。 现在(2020年底)网上对他的看法是有好的有有坏的,结合我个人多年开发的经验以及对这个世界理