首先介绍一个好用的Docker管理软件,Portainer,好用便捷,让你轻松无压力的管理Docker环境。

1、演示环境:

在实际生产中实现公司内部的web服务器加密访问时,我们就需要实现公司内部的私钥CA,并且完成对web服务器的签署请求,这样我们就可以在自身的内部机构实现对数据的机密性、完整性、身份验证的访问与传输

我们不会只有一个Docker服务,一般都是多个Docker服务,这个时候需要中心化管理多个Docker服务,这在Potainer中即添加新的入口点。默认情况下Docker是不开启远程访问的。需要进行一些配置,下面演示下如何配置Docker的远程访问,与安全的Docker访问。

192.168.1.145:CentOS
6.9 x86_64,Apache服务器

实验的准备:实验是在vm9上完成的,一共用了两台虚拟机;一台在CA签署服务器(IP地址是172.16.51.18),另一台是web服务器(IP地址是172.16.51.17)

演示

192.168.1.146:CentOS 7.4
x86_64,私建的CA服务器

私有CA的实现包括有自身私钥的生成、生成自签证书、准备相关的文件

简单配置

  1. 直接开启远程访问,无安全措施。

dockerd -H 0.0.0.0    #监听所有tcp连接,默认端口是6375
  1. 在systemd下,则需要修改docker.service,修改Service部分的ExecStart。

ExecStart=/usr/bin/dockerd -H 0.0.0.0 
  1. 然后任何人都可以直接访问Docker的端口,很不安全。

备注:Apache和CA可以位于同一台服务器

实现私有CA的准备

安全的Docker访问

创建CA,Server和客户端key通过openssl.
自建CA,我们需要对openssl进行一些配置。

  1. 找到openssl.conf配置文件进行配置。
    在CentOS下,openssl.conf位于/etc/pki/tls/,在Mac下,通过brew安装的则位于/usr/local/etc/openssl/下。

  2. 编辑openssl.conf的CA部分

openssl.conf CA部分

确保你配置的目录下,有你准备好的目录。

mkdir -p {certs,private,tls,crl,newcerts}
echo 00 > serial   #注意serial要有数字,不然会报错
touch index.txt
  1. 生成私钥,并自签证书
    参考配置文件的位置,配置文件中的private_keycertificate位置。

openssl genrsa -out private/cakey.pem -des 1024
openssl req -new -x509 -key private/cakey.pem -days 3650 -out cacert.pem
... 需要填写一些资料,国家,省份什么的。
  1. 颁发证书
    4.1
    生成要颁发证书的密钥文件,这个可以在任何主机上操作,我们已经自签了CA。

openssl genrsa -out private/test.key 1024

4.2 生成证书请求

openssl -new -key private/test.key -day 365 -out test.csr

4.3 颁发证书

openssl ca  -in test.csr -out certs/test.crt -days 365
... 填写国家省份什么的,注意配置文件里面有规定至少和CA证书的国家,省份等必须要要有几项一致的。
  1. 将CA证书,颁发的证书,私钥保存起来使用。比如在刚才的Docker配置中,加密的Docker访问方式。

/usr/bin/dockerd --tls --tlscacert=/home/data/cert/cacert.pem \ 
--tlscert=/home/data/cert/certs/test.crt  \
--tlskey=/home/data/cert/private/test.key \
-H 0.0.0.0:2376
  1. 测试Docker访问。
    注意:这里的00.pem就是刚才生成的test.crt

curl -k https://localhost:2376json  \ 
--cert /home/data/cert/cacert.pem \
--key /home/data/cert/private/test.key \
--cert /home/data/cert/newcerts/00.pem  | jq

Curl访问Docker

  1. 配置docker访问

mkdir -pv ~/.docker
#cp -v {ca,cert,key}.pem ~/.docker
cp /home/data/cert/cacert.pem  ~/.docer/ca.pem
cp /home/data/cert/private/test.key  ~/.docer/key.pem
cp /home/data/cert/newcerts/00.pem  ~/.docer/cert.pem
export DOCKER_HOST=tcp://$HOST:2376 DOCKER_TLS_VERIFY=1
  1. 在portcaniner中配置新的endpoint
    刚才的CA证书,服务器证书,服务器密钥都有了,可以直接使用
portaniner配置
  1. 看结果
image.png

2、192.168.1.145安装httpd服务,并启动:

为CA提供私钥图片 1

总结

服务器的安全是一个很重要的技能,关于安全方面的还可以继续加强。这篇文章主要介绍了如何配置Docker来使用portainer远程管理Docker,然后介绍了安全的方式配置Docker与管理Docker。

# yum -y install
httpd  –>  版本:httpd-2.2.15

 

附录

  • Protect the Docker daemon
    socket
  • Portainer

# cd
/etc/httpd/conf

生成自签证书

# cp httpd.conf
httpd.conf.bak

图片 2

# vim httpd.conf 
–>  ServerName localhost:80

生成自签证书的时候,会让我们填写一些信息,例如国家,省,市,公司名称等这些信息可以直接在/etc/pki/tls/openssl.cnf配置文件中更改这些默认的信息。

# service httpd
start

修改/etc/pki/tls/openssl.cnf配置文件中关于证书存放位置,并查看CA证书所需要的文件及目录图片 3

# ss -tnl | grep
:80

手动创建certs crl
newcerts目录并创建index.txt文件与serial文件(并指定起始号)图片 4

3、创建虚拟主机页面存放目录及测试页:

现在一个我们自签署的CA就可以使用了

# mkdir -pv
/web/vhosts/htdocs

web服务器端的准备

# cd
/web/vhosts/htdocs

首先自己要准备好web服务,安装httpd软件包就可以了,要实现ssl功能需要安装ssl模块,所以模块要确保安装上

# vim index.html 
–>  <h3>Index Page</h3>

安装ssl模块

# vim test.html 
–>  <h3>Test Page</h3>

yum install mod_ssl

4、创建基于主机名的虚拟主机:

为web服务器的证书申请以及密钥文件存放创建一个特定的目录

# vim
/etc/httpd/conf/httpd.conf,末尾新增如下代码:

mkdir /etc/httpd/conf/ssl

图片 5

cd /etc/httpd/conf/ssl

# service httpd
reload

把公钥包装成证书申请请求,向CA申请签署;首先要自己生成一个私钥(存放密钥的文件权限是600的)

5、以管理员权限运行notepad,修改本地Windows 10的C:\Windows\System32\drivers\etc\hosts文件,末尾新增代码:192.168.1.145
web.vhosts.com,保存修改后访问测试页

图片 6

图片 7

重新启动httpd服务,加载新添加的模块

图片 8

service httpd restart

图片 9

签署请求申请前查看自己的FQDN,没有指定的可以直接更改/etc/hosts配置文件添加一条对应关系就可以了

 

图片 10

6、192.168.1.146创建私有CA:

生成证书签署请求图片 11把签署请求发送给CA服务器端(现实中为了确保其安全性,需要手动复制签署请求到CA认证机构去签署;避免在网络传输中数据泄露)

(1)安装相关软件包:# yum -y install openssl
openssh-clients

现在直接使用scp发送到CA服务器端图片 12

备注:OpenSSL的配置文件是/etc/pki/tls/openssl.cnf,此处无需修改,使用默认配置即可

在CA服务器端完成签署图片 13

(2)创建保存证书信息的数据库文件:# touch
/etc/pki/CA/index.txt

签署完成后查看CA机构的证书相关文件的变化图片 14

(3)创建保存证书序列号的文件:# echo 01 >
/etc/pki/CA/serial

图片 15

(4)生成私钥cakey.pem:# (umask 077; openssl
genrsa -out /etc/pki/CA/private/cakey.pem 2048)

图片 16

备注:genrsa子命令常用选项

  • genrsa:用于生成RSA密钥对的OpenSSL子命令

  • -out
    cakey.pem:私钥保存位置

  • 2048:密钥长度,也可以使用1024或4096

更多genrsa子命令选项可查看:# man genrsa

(5)生成CA证书cacert.pem:

# openssl req -new
-x509 -key /etc/pki/CA/private/cakey.pem -days 7300 -out
/etc/pki/CA/cacert.pem

图片 17

其中ca.keyso.com为证书颁发者

备注:req子命令常用选项

  • req:用于证书签署请求和证书生成的OpenSSL子命令

  • -new:生成新证书签署请求

  • -x509:专用于CA生成自签证书

  • -key
    cakey.pem:生成CA证书请求时用到的私钥

  • -days
    7300:证书的有效期限为20年

  • -out
    cacert.pem:证书的保存路径

更多req子命令选项可查看:# man req

 

7、192.168.1.145生成证书签署请求文件并发送至192.168.1.146:

(1)安装相关软件包:# yum -y install
openssh-clients

(2)创建用于存放密钥的目录:# mkdir -pv
/etc/httpd/ssl

(3)生成私钥web-vhosts-com.key:# (umask 077; openssl
genrsa -out /etc/httpd/ssl/web-vhosts-com.key 2048)

图片 18(4)生成证书签署请求文件web-vhosts-com.csr:

# openssl req -new
-key /etc/httpd/ssl/web-vhosts-com.key -days 7300 -out
/etc/httpd/ssl/web-vhosts-com.csr

图片 19其中web.vhosts.com为证书颁发的对象

(5)将证书签署请求文件web-vhosts-com.csr发送至192.168.1.146:

# scp
/etc/httpd/ssl/web-vhosts-com.csr
root@192.168.1.146:/etc/pki/CA/certs

8、192.168.1.146签署证书并发还给192.168.1.145:

(1)签署证书:

# openssl ca -in
/etc/pki/CA/certs/web-vhosts-com.csr -days 7300 -out
/etc/pki/CA/certs/web-vhosts-com.crt

图片 20备注:ca子命令常用选项

  • ca:用于签署证书请求的OpenSSL子命令

  • -in
    web-vhosts-com.csr:证书签署请求文件路径

  • -days
    7300:证书的有效期限为20年

  • -out
    web-vhosts-com.crt:证书的保存路径

更多ca子命令选项可查看:# man ca

图片 21(2)将证书web-vhosts-com.crt发还给192.168.1.145:

# scp
/etc/pki/CA/certs/web-vhosts-com.crt
root@192.168.1.145:/etc/httpd/ssl

(3)192.168.1.145查看证书信息:

图片 22

# openssl x509 -in
/etc/httpd/ssl/web-vhosts-com.crt -noout -text       //显示的信息多

# openssl x509 -in
/etc/httpd/ssl/web-vhosts-com.crt -noout -subject

# openssl x509 -in
/etc/httpd/ssl/web-vhosts-com.crt -noout -serial

图片 23

备注:

  • 使用私钥web-vhosts-com.key和证书web-vhosts-com.crt生成微软专用证书web-vhosts-com.crt.pfx:

# cd
/etc/httpd/ssl

# openssl pkcs12
-export -out web-vhosts-com.pfx -inkey web-vhosts-com.key -clcerts -in
web-vhosts-com.crt

图片 24

  • 使用微软专用证书web-vhosts-com.pfx生成私钥web-vhosts-com.key和证书web-vhosts-com.crt:

# openssl pkcs12
-in web-vhosts-com.pfx -nodes -out web-vhosts-com.pem

图片 25

# openssl rsa -in
web-vhosts-com.pem -out web-vhosts-com.key

图片 26

# openssl x509 -in
web-vhosts-com.pem -out web-vhosts-com.crt

 

9、192.168.1.145配置Apache支持SSL:

(1)安装SSL模块:# yum -y install
mod_ssl

备注:yum方式安装的Apache默认没有装载SSL模块,即没有/etc/httpd/conf.d/ssl.conf配置文件,也没有/usr/lib64/httpd/modules/mod_ssl.so模块文件

图片 27

(2)配置HTTPS虚拟主机并访问测试页:

# vim
/etc/httpd/conf/httpd.conf,末尾新增如下代码:

图片 28

备注:上述内容也可在配置文件/etc/httpd/conf.d/ssl.conf中直接修改

# httpd -t

# service httpd
reload

# ss -tnl | grep
:443

图片 29

 

图片 30

 

图片 31

图片 32

图片 33

(3)将所有HTTP请求(80端口)重定向到HTTPS(443端口),并访问测试页:

# vim
/etc/httpd/conf/httpd.conf,在<VirtualHost*:80>和</VirtualHost>标签中新增如下代码:

图片 34

# httpd -t

# service httpd
reload

直接访问web.vhosts.com,会自动跳转至

图片 35

直接访问web.vhosts.com/test.html,会自动跳转至

图片 36

/etc/httpd/conf/httpd.conf最终末尾一共新增了如下代码:

图片 37

 

10、在360安全浏览器中安装证书:

(1)360安全浏览器中访问效果:

图片 38

(2)将192.168.1.146中的证书/etc/pki/CA/cacert.pem保存至本地Windows10桌面,并重命名为cacert.crt

(3)在360安全浏览器中安装证书:设置 –> 安全设置 –> 管理HTTPS/SSL证书

图片 39

 

图片 40

 

图片 41

 

图片 42

 

图片 43

 

图片 44

 

图片 45

 

图片 46

(4)重新打开360安全浏览器,再次访问测试页:

图片 47

图片 48

已没有“证书风险”的提示

(5)查看证书信息:

图片 49

 

图片 50

备注:如果是生产环境中需要使用证书,建议从正规的证书颁发机构处申请。

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147664.htm

图片 51

相关文章