在 Registry 服务器上配置 TLS在本节中,将在服务器上配置 TLS,使能通过 https 协议来通信。在服务器上启用 TLS 是在企业防火墙内运行 Registry 推荐的最低安全配置。达成这一目标的方法之一就是构建你自己的 Registry 镜像。 下载 source 并生成 certificates1、下载 Registry 源码。
当然,也可以使用 2、把下载的包解压到本地目录。
解压后创建
3、进入
$ cd distribution
4、新建
$ mkdir certs
5、使用 SSL 生成自签名证书。 $ openssl req \ -newkey rsa:2048 -nodes -keyout certs/domain.key \ -x509 -days 365 -out certs/domain.crt 此命令将提示你回答一些基本的信息,用于创建证书。
6、列出 $ ls certs domain.crt domain.key
当你构建这个 Container 时, 将 TLS 加入配置
1、编辑 ./cmd/registry/config.yml 文件。 $ vi ./cmd/registry/config.yml
2、定位到 http: addr: :5000 secret: asecretforlocaldevelopment debug: addr: localhost:500
3、给服务器的自签名证书新增一个 http: addr: :5000 secret: asecretforlocaldevelopment debug: addr: localhost:5001 tls: certificate: /go/src/github.com/docker/distribution/certs/domain.crt key: /go/src/github.com/docker/distribution/certs/domain.key
提供 Container 内到证书的路径。如果你希望跨 Layer 使用两步认证,那么你可以增加一个 4、保存并关闭该文件。 构建并运行你的 Registry 镜像1、构建你的 Registry 镜像。 $ docker build -t secure_registry . 2、运行你的新镜像。 $ docker run -p 5000:5000 registry_local:latest time="2015-04-12T03:06:18.616502588Z" level=info msg="endpoint local-8082 disabled, skipping" environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6 service=registry time="2015-04-12T03:06:18.617012948Z" level=info msg="endpoint local-8083 disabled, skipping" environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6 service=registry time="2015-04-12T03:06:18.617190113Z" level=info msg="using inmemory layerinfo cache" environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6 service=registry time="2015-04-12T03:06:18.617349067Z" level=info msg="listening on :5000, tls" environment=development instance.id=bf33c9dc-2564-406b-97c3-6ee69dc20ec6 service=registry time="2015-04-12T03:06:18.628589577Z" level=info msg="debug server listening localhost:5001" 2015/04/12 03:06:28 http: TLS handshake error from 172.17.42.1:44261: remote error: unknown certificate authority
观察启动时的信息。你应该可以看到
3、使用 $ curl -v https://localhost:5000 * Rebuilt URL to: https://localhost:5000/ * Hostname was NOT found in DNS cache * Trying 127.0.0.1... * Connected to localhost (127.0.0.1) port 5000 (#0) * successfully set certificate verify locations: * CAfile: none CApath: /etc/ssl/certs * SSLv3, TLS handshake, Client hello (1): * SSLv3, TLS handshake, Server hello (2): * SSLv3, TLS handshake, CERT (11): * SSLv3, TLS alert, Server hello (2): * SSL certificate problem: self signed certificate * Closing connection 0 curl: (60) SSL certificate problem: self signed certificate More details here: http://curl.haxx.se/docs/sslcerts.html (责任编辑:IT) |