详解docker API管理接口增加CA安全认证

 更新时间:2022年06月07日 09:51:38   作者:字母哥哥  
这篇文章主要介绍了docker API管理接口增加CA安全认证,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

前文中我们曾经介绍过《使用IDEA远程工具》连接Docker REST API,我们会发现一个问题,任何知道Docker 服务器IP、端口的第三方都可以访问这个API,非常的不安全。为了保证Docker API的安全性,我们有必要使用数字证书进行安全验证。

  • 为docker服务端配置服务端证书,用于验证客户端请求
  • 为访问docker 服务的客户端配置客户端证书,用于验证服务端发送的交互信息的安全性。

如果只在自己公司内部使用到数字证书,就没有必要花钱向专业的CA机构进行认证授权(价格不菲),采用自生成的CA证书在公司内部使用也是完全可以的。下图是CA证书及子证书的签发过程,请结合文章进行理解。

一、模拟创建CA证书(中间边框的部分)

正常情况下CA机构有自己的私钥,因为我们是模拟CA机构,所以这个私钥需要我们自己创建。执行下文中的命令,输入2次密码(密码务必记住,后文中需要使用),执行完命令之后,当前目录下生成一个ca-key.pem文件(上图中红色背景代表)。

# openssl genrsa -aes256 -out ca-key.pem 4096
Generating RSA private key, 4096 bit long modulus
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:
Verifying - Enter pass phrase for ca-key.pem:

该命令用于创建机构CA证书,执行该命令首先会提示输入密码(上文中设置的)。正常请开给你下,该流程是某公司向CA提机构提交自己公司的相关信息,CA授权机构根据这些信息(审核信息之后)生成一个用于该公司的CA证书(该公司范围的根证书)。

openssl req -new -x509 -days 3650 -key ca-key.pem -sha256 -out ca.pem

然后提示需要输入国家、省份、地市、公司、组织、服务器地址或域名、邮箱联系方式,其中国家和服务器地址或域名要填上,否则后续无法使用。

# 国家:CN
Country Name (2 letter code) [XX]: CN
# 省份: 可以不填,直接回车
State or Province Name (full name) []:
# 地市:可以不填,直接回车
Locality Name (eg, city) [Default City]:
# 公司: 可以不填,直接回车
Organization Name (eg, company) [Default Company Ltd]:
# 组织: 可以不填,直接回车
Organizational Unit Name (eg, section) []:
# 服务器地址或域名,按要求填写
Common Name (eg, your name or your server's hostname) []:  192.168.1.111
# 邮箱联系方式,可以不填,直接回车
Email Address []:

当前目录下生成一个ca.pem,该证书就是CA证书

二、签发服务器端证书(右边蓝色背景部分)

CA证书还可以用于签发子证书(数字证书),下面我们就模拟签发一个服务端证书。仍然需要先创建一个服务器端私钥server-key.pem

openssl genrsa -out server-key.pem 4096

创建服务器端CSRserver.csr,该文件作为向授权机构申请签发子证书的申请文件

openssl req -subj "/CN=192.168.1.111" -sha256 -new -key server-key.pem -out server.csr

模拟授权机构创建配置文件,serverAuth表示服务端证书

echo subjectAltName = IP:192.168.1.111,IP:0.0.0.0 >> extfile.cnf 
echo extendedKeyUsage = serverAuth >> extfile.cnf

创建服务器端证书会提示输入密码,输入上文中设置的密码即可。

openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out server-cert.pem -extfile extfile.cnf

生成2个文件ca.srl、server-cert.pem,我们需要的是server-cert.pem作为服务端CA证书

三、签发客户端证书(左边黄色背景的部分)

下面我们就模拟签发一个客户端证书。仍然需要先创建一个客户端私钥key.pem

openssl genrsa -out key.pem 4096

创建客户端CSRclient.csr,该文件作为向授权机构申请签发子证书的申请文件

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

模拟授权机构创建配置文件,clientAuth 表示客户端证书

echo extendedKeyUsage = clientAuth >> extfile.cnf

执行下列命令同样会提示输入密码,生成2个文件ca.srlcert.pem,我们需要的是cert.pem作为客户端证书

openssl x509 -req -days 3650 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem -extfile extfile.cnf

四、签发证书收尾工作

删除证书签发请求文件,已经失去用处。

rm -v client.csr server.csr

为上文中生成的各种证书授予文件访问权限。

chmod -v 0400 ca-key.pem key.pem server-key.pem;
chmod -v 0444 ca.pem server-cert.pem cert.pem;

查看CA证书有效期

# openssl x509 -in ca.pem -noout -dates
notBefore=Apr 10 01:17:55 2022 GMT
notAfter=Apr  7 01:17:55 2032 GMT

五、配置docker服务端

然后我们为docker服务端配置证书,分别是ca.pem、server-cert.pem、server-key.pem。将这三个文件放入/etc/docker/cert/目录下。

mkdir /etc/docker/cert/;
cp ./ca.pem ./server-cert.pem ./server-key.pem  /etc/docker/cert/;

修改vim /lib/systemd/system/docker.service文件中的ExecStart这一行,修改为如下的一段

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

修改之后重启docker服务

#重启
systemctl daemon-reload && systemctl restart docker

六、IDEA配置使用客户端证书

我们在IDEA docker插件客户端证书配置处做如下选择:“File -> Settings -> Build、Execution、Deployment -> Docker”

  • Engine API URL的位置写https://<ip>:2375,记住是https,不是http,也不是tcp
  • 将客户端的需要的三个证书文件ca.pem、cert.pem、key.pem放入一个目录下,并使选择该目录作为Certificates folder。

到此这篇关于docker API管理接口增加CA安全认证的文章就介绍到这了,更多相关docker 增加CA安全认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker部署php运行环境(php-fpm+nginx)

    Docker部署php运行环境(php-fpm+nginx)

    Docker 是一种流行的容器化平台,可以帮助开发人员快速创建、部署和管理容器化应用程序,本文将介绍如何使用 Docker 搭建 PHP 开发环境服务器,让您能够轻松地开始 PHP 开发工作,感兴趣的可以了解一下
    2023-11-11
  • Docker 阿里云镜像仓库CR使用小结

    Docker 阿里云镜像仓库CR使用小结

    阿里云提供了免费的容器镜像服务,更重要的是支持公开和私有仓库,本文主要介绍了Docker 阿里云镜像仓库CR使用小结,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • Docker Compose与Docker镜像仓库详解

    Docker Compose与Docker镜像仓库详解

    Docker Compose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器,这篇文章主要介绍了Docker Compose与Docker镜像仓库,需要的朋友可以参考下
    2023-03-03
  • Centos7安装Docker(2020最新亲测可用,直接复制粘贴即可)

    Centos7安装Docker(2020最新亲测可用,直接复制粘贴即可)

    这篇文章主要介绍了Centos7安装Docker(2020最新亲测可用,直接复制粘贴即可),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Docker容器通过独立IP暴露给局域网的方法

    Docker容器通过独立IP暴露给局域网的方法

    这篇文章主要介绍了Docker容器通过独立IP暴露给局域网的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-04-04
  • docker 查询或获取私有仓库(registry)中的镜像的方法

    docker 查询或获取私有仓库(registry)中的镜像的方法

    这篇文章主要介绍了docker 查询或获取私有仓库(registry)中的镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Docker 搭建 Tomcat 运行环境的方法

    Docker 搭建 Tomcat 运行环境的方法

    这篇文章主要介绍了Docker 搭建 Tomcat 运行环境的方法,Docker与虚拟机及搭建过程,介绍的非常详细,需要的朋友可以参考下
    2016-10-10
  • 关于docker容器部署redis步骤介绍

    关于docker容器部署redis步骤介绍

    大家好,本篇文章主要讲的是关于docker容器部署redis步骤介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-11-11
  • 常用的Docker命令及示例汇总分析

    常用的Docker命令及示例汇总分析

    这篇文章主要介绍了常用的Docker命令及示例的汇总分析,附含源码示例分析,有需要的朋友可以借鉴参考下,希望可以对广大读者有所帮助
    2021-09-09
  • 使用docker部署dubbo项目的方法步骤

    使用docker部署dubbo项目的方法步骤

    这篇文章主要介绍了使用docker部署dubbo项目的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论