DDC系列 - 设置CA证书
1 名词说明
- DDC:Docker Data Center,Docker数据中心管理系统;
- UCP: Universal Control Plane,通用控制面板;
- DTR: Docker Trusted Registry,Docker镜像注册表;
- CSR: Certificate Signing Request,即证书签名请求, 这个并不是证书,而是向权威证书颁发机构获得签名证书的申请,其核心内容是一个公钥;
- PEM: X.509证书的一种编码格式,内容以"-----BEGIN"开头,以"-----END"结尾,内容是BASE64编码;
- 服务器: 这里是指安装UCP/DTR的主机,或者作为Docker Remote API场景中被访问的服务器端主机,本文中UCP服务器IP为192.168.1.101,DTR服务器IP为192.168.1.102;
- 客户端: 这里是指需要访问UCP/DTR的主机,或者作为Docker Remote API场景中发起访问请求的客户端主机,本文中客户端IP为192.168.1.103, 192.168.1.104。
2 生成证书
2.1 通过SSH登录到服务器主机。
2.2 生成CA私钥
CA私钥文件名:ca-key.pem
$ mkdir -p /home/ca && cd /home/ca $ openssl genrsa -out ca-key.pem 4096
2.3 生成自签名CA证书
CA证书文件名:ca.pem
需要用到步骤2.2生成的CA私钥。
$ openssl req -x509 -sha256 -batch -subj '/C=CN/ST=Beijing/L=Beijing/O=COMPANY/OU=PBG/CN=www.yourdomain.com' -new -days 365 -key ca-key.pem -out ca.pem
生成证书时,通过-days 365设置证书的有效期。单位为天,默认情况下为30天。
参数说明:
-
C
表示国家,中国为CN
; -
ST
表示省,比如Beijing
; -
L
表示城市,比如Beijing
; -
O
表示公司,比如COMPANY
; -
OU
表示部门名字,比如RD
; -
CN
表示公司域名,比如www.yourdomain.com
。
2.4 生成服务器私钥
服务器私钥文件名: server-key.pem
$ openssl genrsa -out server-key.pem 4096
2.5 生成服务器证书签名请求
服务器证书签名请求文件名: server.csr
需要用到步骤2.4生成的服务器私钥。
$ openssl req -subj '/CN=<yourdomain.com>' -sha256 -new -key server-key.pem -out server.csr
CN为UCP(DTR)所在主机名或FQDN。
server.csr是一个临时文件,生成server-cert.pem以后,可以删除。
2.6 生成服务器证书
服务器证书文件名:server-cert.pem
需要用到的文件:
步骤2.2生成的CA私钥;
步骤2.3生成的CA证书;
步骤2.5生成的服务器证书签名请求。
$ echo subjectAltName = DNS:ucp.yourdomain.com,IP:0.0.0.0 > extfile.cnf $ 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
subjectAltName
参数限制客户端的IP列表或者域名列表。只有在列表中的客户端才能通过客户端证书访问UCP主机上的Docker Daemon。
例如192.168.1.103, 192.168.1.104,则只允许这2个客户端上docker client访问。如果添加0.0.0.0,则所有客户端都可以通过证书访问。
extfile.cnf是一个临时文件,生成server-cert.pem以后,可以删除。
2.7 生成客户端密钥
客户端私钥文件名: client-key.pem
$ openssl genrsa -out client-key.pem 4096
2.8 生成客户端证书签名请求
客户端证书签名请求文件名: client.csr
需要用到步骤2.7生成的客户端私钥。
$ openssl genrsa -out client-key.pem 4096 $ openssl req -subj '/CN=client' -new -key client-key.pem -out client.csr
client.csr是一个临时文件,生成server-cert.pem以后,可以删除。
2.9 生成客户端证书
客户端证书文件名:client-cert.pem
需要用到的文件:
步骤2.2生成的CA私钥;
步骤2.3生成的CA证书;
步骤2.5生成的客户端证书签名请求。
$ subjectAltName = DNS:192.168.1.101,IP:192.168.1.103,IP:192.168.1.104 $ echo extendedKeyUsage = clientAuth > extfile.cnf $ openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -CAcreateserial -out client-cert.pem -extfile extfile.cnf
3 清理工作
3.1 删除临时文件
$ rm -v client.csr server-csr
3.2 删除写入权限
$ chmod -v 0400 ca-key.pem client-key.pem server-key.pem $ chmod -v 0444 ca.pem server-cert.pem client-cert.pem
4 使用CA
4.1 UCP设置自定义CA证书
在UCP Web UI中, 导航到管理员设置
页面,在左侧菜单中,单击证书
依次上传:
- 私钥:
server-key.pem
; - 服务器证书:
server-cert.pem
;
- CA证书:
ca.pem
。
点击保存
4.2 DTR设置自定义CA证书
在DTR Web UI中,导航到系统
页面, 在右侧页面中,点击常规
,定位到域和代理
,点击显示TLS设置
依次上传:
- 私钥:
server-key.pem
; - 服务器证书:
server-cert.pem
;
- CA证书:
ca.pem
。
点击保存
4.3 Docker Remote API安全配置
a, 在服务器上配置docker守护进程
$ dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2375
重启docker后,步骤2.6中未授权的客户端将无法远程访问服务器上的Docker API。
例如,在未授权的客户端执行如下命令将报权限错误:
$ docker -H tcp://192.168.1.101:2375 version
b, 在客户端上配置docker服务
复制ca.pem, client-cert.pem, client-key.pem三个文件到客户端主机上,然后在客户端主机上执行如下命令:
$ docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=192.168.1.101:2375 version
可以正常访问服务器上的Docker Remote API。
如果不希望每次执行命令都带上这么多参数
可以把 ca.pem,cert.pem,key.pem三个文件移动到本地目录:~/.docker
,然后设置环境变量:
$ export DOCKER_HOST=tcp://$HOST:2375 DOCKER_TLS_VERIFY=1
执行如下命令访问服务器上的Docker Remote API。
$ docker -H=192.168.1.101:2375 version
系列文章
DDC系列 - UCP安装指南
DDC系列 - DTR安装指南
DDC系列 - 离线安装UCP和DTR
DDC系列 - 设置CA证书
你现在的气质里,藏着你走过的路,读过的书,爱过的人。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云专有宿主机,构建公共云上的专有资源池
——企业级用户又一利器,阿里云发布专有宿主机,轻松构建公共云上的专有资源池 近日,阿里云发布专有宿主机上线公测,用户通过独占物理服务器资源,来满足安全合规、性能隔离等诉求,帮助企业级用户轻松构建公共云上的专有资源池。对于企业级用户迁移上云,将会拥有更加丰富的选择。在专有宿主机上创建ECS云服务器,用户不仅在物理级别上和其他租户进行隔离,保证单租户环境性能的稳定性,同时也能拥有阿里云虚拟化管控的所有功能和优势。 近年来,云计算已经俨然成为了一种趋势,不仅仅是个人用户、创业公司选择在云上搭建自己的基础设施,越来越多的企业级用户开始选择云平台搭建自己的系统。从测试系统的迁移到生产系统搭建,从开始的只承载边缘业务到不断的运用于核心业务,云计算开始承担了越来越大的业务量。云计算的特点在于弹性、灵活、可伸缩,而随着业务复杂度的上升,场景的更加多样
- 下一篇
云上大数据系列1:手把手教你何如在ECS上搭建Hadoop开发测试环境(CDH版)
本篇是云上大数据系列第一篇文章,主要介绍开发测试环境的搭建。在后续的文章中,我们还将会分享更多关于云上大数据系统的性能分析和调优经验,敬请期待。 大数据系统是典型的复杂分布式系统,搭建一套大数据系统不但需要大量的资源,还需要对大数据系统本省有一定的了解。云计算的普及使得大数据系统的快速部署,甚至一键部署成为可能。笔者在阿里云上尝试搭建了一套大数据系统,将部署的过程和大家分享一下。 资源环境:ecs.d1.6xlarge × 5 软件系统:CDH 5.14.2 操作系统:CentOS 7.3 以下教程基于Cloudera官方教程,结合笔者实际部署过程中遇到的问题编写而成。读者在实践的过程中可以将本文和官方教程结合来参考。官方教程点这里查看。 教程特点(做好心理准备):需要下载 cloudera-manager-daemons 包(744M),cloudera-manager-agent 包(788M),下载过程比较慢,且中途容易出错,需要多次重试。如果对上述部署方式不满意,还可以尝试官方的第三种方式(预下载安装包并手动安装):https://www.cloudera.com/docume...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题