• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Docker开启TLS和CA认证的方法步骤

    前言:Docker直接开启2375端口是不安全的,别人只要连上之后就可以任意操作,下面是开启Docker的TLS和CA认证方法,并使用Jenkins和Portainer连接。

    一、生成证书

    查看服务器主机名

    hostname

    auto-generate-docker-tls-ca.sh

    # !/bin/bash
    
    # 一键生成TLS和CA证书
    
    # Create : 2021-08-25
    # Update : 2021-08-25
    # @Autor : wuduoqiang
    
    # 服务器主机名
    SERVER="6c377ffb8e86"
    # 密码
    PASSWORD="2cx&BUjsV4u%3TW9"
    # 国家
    COUNTRY="CN"
    # 省份
    STATE="海南省"
    # 城市
    CITY="海口市"
    # 机构名称
    ORGANIZATION="小强崽公司"
    # 机构单位
    ORGANIZATIONAL_UNIT="小强崽单位"
    # 邮箱
    EMAIL="875667601@qq.com"
    
    # 生成CA密钥
    openssl genrsa -aes256 -passout pass:$PASSWORD  -out ca-key.pem 2048
    
    # 生成CA证书
    openssl req -new -x509 -passin "pass:$PASSWORD" -days 3650 -key ca-key.pem -sha256 -out ca-cert.pem -subj "/C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL"
    
    # 生成服务端密钥
    openssl genrsa -out server-key.pem 2048
    
    # 生成服务端证书签名的请求文件
    openssl req -subj "/CN=$SERVER" -new -key server-key.pem -out server-req.csr
    
    # 生成服务端证书
    openssl x509 -req -days 3650 -in server-req.csr -CA ca-cert.pem -CAkey ca-key.pem -passin "pass:$PASSWORD" -CAcreateserial -out server-cert.pem
    
    # 生成客户端密钥
    openssl genrsa -out client-key.pem 2048
    
    # 生成客户端证书签名的请求文件
    openssl req -subj '/CN=client' -new -key client-key.pem -out client-req.csr
    
    # 生成客户端证书
    sh -c 'echo "extendedKeyUsage=clientAuth" >> extfile.cnf'
    openssl x509 -req -days 3650 -in client-req.csr -CA ca-cert.pem -CAkey ca-key.pem  -passin "pass:$PASSWORD" -CAcreateserial -out client-cert.pem -extfile extfile.cnf
    
    # 更改密钥权限
    chmod 0400 ca-key.pem server-key.pem client-key.pem
    # 更改证书权限
    chmod 0444 ca-cert.pem server-cert.pem client-cert.pem
    # 删除无用文件
    # rm ca-cert.srl client-req.csr server-req.csr extfile.cnf

    文件说明

    ca.srl:CA签发证书的序列号记录文件
    ca-cert.pem:CA证书
    ca-key.pem:CA密钥
    server-key.pem:服务端密钥
    server-req.csr:服务端证书签名请求文件
    server-cert.pem:服务端证书
    client-key.pem:客户端密钥
    extfile.cnf:客户端证书扩展配置文件
    client-req.csr:客户端证书签名请求文件
    client-cert.pem:客户端证书

    命令解析

    # -subj /C=$COUNTRY/ST=$STATE/L=$CITY/O=$ORGANIZATION/OU=$ORGANIZATIONAL_UNIT/CN=$SERVER/emailAddress=$EMAIL
    -subj 是 指定证书申请人的信息
    C  是 Country Name
    ST 是 State or Province Name
    L  是 Locality Name
    O  是 Organization Name
    OU 是 Organizational Unit Name
    CN 是 Common Name
    emailAddress 是 Email Address

    二、开启远程

    开启Docker的远程访问API

    # 编辑文件
    vim /etc/systemd/system/docker.service
    # 修改内容,注意证书的指定位置
    ExecStart=/usr/bin/dockerd \
    
    --tlsverify \
    
    --tlscacert=/etc/docker/ca-cert.pem \
    
    --tlscert=/etc/docker/server-cert.pem \
    
    --tlskey=/etc/docker/server-key.pem \
    
    -H unix:///var/run/docker.sock \
    
    -H tcp://0.0.0.0:2375
    # 重启服务
    systemctl daemon-reload && systemctl restart docker

    如果没有密钥和证书是连不上的

    docker -H 192.168.8.248:2375 images

    使用主机名没有密钥和证书也是连不上的

    docker -H 6c377ffb8e86:2375 images

    加上密钥和证书没有使用主机名也是连不上

    curl https://192.168.8.248:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem

    加上密钥和证书并且使用主机名就能访问

    curl https://6c377ffb8e86:2375/info --cert ./client-cert.pem --key ./client-key.pem --cacert ./ca-cert.pem

    三、远程连接

    3.1 Jenkins连接

    添加凭证

    填写信息

    测试连接,注意这里要使用主机名

    如果是docker安装的jenkins,则需要映射主机名

    version: '3'
    services:
      jenkins:
        restart: always
        image: 192.168.8.247/xiaoqiangzai/jenkins:latest
        container_name: jenkins
        ports:
          - '8888:8080'
          - '50000:50000'
        volumes:
          - ./data/jenkins_home:/var/jenkins_home
          - ./data/war/jenkins.war:/usr/share/jenkins/jenkins.war
        environment:
          JENKINS_OPTS: "--prefix=/jenkins"
        extra_hosts:
          - "6c377ffb8e86:192.168.8.248"

    3.2 Portainer连接

    选择客户端密钥和证书以及CA证书

    连接正常

    如果是docker安装的Portainer,则需要映射主机名

    version: '3'
    services:
      portainer:
        restart: always
        image: portainer/portainer-ce:latest
        container_name: portainer
        privileged: true
        ports:
          - '9000:9000'
        volumes:
          - ./data/data:/data
          - ./data/public:/public
        extra_hosts:
          - "6c377ffb8e86:192.168.8.248"

    到此这篇关于Docker开启TLS和CA认证的方法步骤的文章就介绍到这了,更多相关Docker开启TLS和CA认证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    上一篇:腾讯云服务器tomcat端口无法访问的解决方法
    下一篇:简析Linux网络编程函数
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Docker开启TLS和CA认证的方法步骤 Docker,开启,TLS,和,认证,的,