java通过证书访问服务器,SpringBoot - 使用docker-java远程管理docker教程2(使用证书进行安全连接)...

在前文中我们是通过直接暴露端口进行 docker的连接。但是这种做法存在安全隐患,因为只要知道了服务器的 ip地址以及端口号即可对 docker进行肆意操作与破坏。所以实际项目中建议使用密钥的方式做认证。

三、使用证书进行安全连接

1,创建证书

(1)首先选择一个存放密钥文件的地方(我这里选择 /home/user/certs),执行如下命令创建文件夹,并进入该文件夹:

mkdir /home/user/certs

cd /home/user/certs

(2)执行如下命令生成 CA私钥,过程中会要求输入密码(这里我输入 123456):

openssl genrsa -aes256 -out ca-key.pem 4096

(3)接着执行如下命令生成 CA公钥,也就是证书。一开始会要求输入前面设置的密码:

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

注意:过程中 Common Name填写服务器的 ip地址。其它几项就随便填了。

286ce719276c229aa3314635e3dc95f9.png

(4)接着执行如下命令生成服务器私钥:

openssl genrsa -out server-key.pem 4096

(5)接着执行如下命令用私钥生成服务器公钥请求文件,也就是证书:

注意:CN后面的 IP地址即为前面我们设置的服务器 IP。

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

(6)接着执行如下配置哪些主机可以访问 docker:

这里我们可以填写 IP地址或者 DNS name。 0.0.0.0代表所有主机都可以通过密钥文件的方式访问

echo subjectAltName = DNS:192.168.60.133,IP:192.168.60.133,IP:0.0.0.0,IP:127.0.0.1 >> extfile.cnf

(7)接着执行如下命令:

echo extendedKeyUsage = serverAuth >> extfile.cnf

(8)接着执行如下命令将上述多个生成信息,写入文件(期间同样会要求输入密码)。

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

(9)接着执行如下命令生成客户端私钥:

openssl genrsa -out key.pem 4096

(10)接着执行如下命令生成客户端证书请求文件:

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

(11)接着执行如下命令:

echo extendedKeyUsage = clientAuth >> extfile.cnf

(12)接着执行如下命令用 CA为客户端签署证书文件(期间同样会要求输入密码):

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

(13)执行如下命令删除临时文件 :

rm -v client.csr server.csr

(14)执行如下命令配置证书权限:

chmod -v 0400 ca-key.pem key.pem server-key.pem

chmod -v 0444 ca.pem server-cert.pem cert.pem

(15)查看 /home/user/certs下的文件,一共应该有 8 个文件:

12b45c7ce1b542080d7384465c40752a.png

2,服务端设置

(1)首先执行如下命令编辑服务器上的 docker.service 文件。

vi /lib/systemd/system/docker.service

(2)找到 Execstart=/usr/bin/dockerd,并在后加上如下内容,然后保存退出。

-D --tlsverify=true --tlscert=/home/user/certs/server-cert.pem --tlskey=/home/user/certs/server-key.pem --tlscacert=/home/user/certs/ca.pem -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

d20df52b1a5935a2d8c67562831cd3a3.png

(3)接着运行以下命令,重启 docker服务。

systemctl daemon-reload

service docker restart//重启启动docker

(4)执行如下命令可以查看相关内容,看看设置是否生效:

systemctl status docker

4d6a3f2eeff5e4dcda0b26b38ad14d0f.png

3,客户端设置

(1)首先将 ca-key.pem、ca.pem、cert.pem、key.pem这 4 个密钥文件下载到本机的磁盘上,这里我将其放在/Users/hangge/dockerCerts 目录下。

2560aefccc2d7694c02c7964abe4d3af.png

(2)然后 Java这边,使用证书进行安全连接即可。下面代码在连接 docker服务器后,获取相关信息并打印出来。

@RestController

public class HelloController {

@RequestMapping("/test")

public String test() {

//进行安全认证

DockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()

.withDockerTlsVerify(true)

.withDockerCertPath("/Users/hangge/dockerCerts/")

.withDockerHost("tcp://192.168.60.133:2375")

.withDockerConfig("/Users/hangge/dockerCerts/")

.build();

// 连接docker服务器

DockerClient dockerClient = DockerClientBuilder.getInstance(config).build();

// 获取服务器信息

Info info = dockerClient.infoCmd().exec();

String infoStr = JSONObject.toJSONString(info);

System.out.println(infoStr);

return infoStr;

}

}

(3)运行结果如下:

7f84558cf0ba305b5d22ecef90517272.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值