Docker-TLS

84 阅读1分钟

使用 CloudFlare 的 PKI 工具集 cfssl 来创建证书

这里使用已经配置好的docker环境

docker run -it --entrypoint /bin/bash  --name cfssl_TSL cfssl/cfssl:1.5.0
mkdir production_tsl
cd production_tsl
  • CA的profiles配置
  • profiles: 可以定义多个 profile,分别指定不同的过期时间、使用场景等参数,在签名证书时使用某个 profile;
  • signing:表示该证书可用于签名其它证书;生成的 ca.pem 证书中 CA=TRUE;
  • key encipherment:表示密钥用法为密钥加密
  • server auth: 服务端证书,表示 client 可以用该 CA 对 server 提供的证书进行验证;
  • client auth: 客户端证书,表示 server 可以用该 CA 对 client 提供的证书进行验证
cat > ca-config.json << EOF
{
  "signing": {
    "default": {
      "expiry": "87600h"
    },
    "profiles": {
      "docker": {
        "usages": [
            "signing",
            "key encipherment",
            "server auth",
            "client auth"
        ],
        "expiry": "87600h"
      }
    }
  }
}
EOF
  • CA证书请求文件
cat > ca-csr.json << EOF
{
  "CN": "Docker",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "Company Name",
      "OU": "develop"
    }
  ],
  "ca": {
    "expiry": "87600h"
 }
}
EOF
  • 首先我们需要创建一个 CA 证书,后续利用它去生成其他证书。
  • 生成CA 及ca-key
cfssl gencert -initca ca-csr.json | cfssljson -bare ca
cat > server-csr.json << EOF
{
  "CN": "Docker Server",
  "hosts": [
    "127.0.0.1",
    "you server ip",
    "you server hostname"
  ],
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "Company Name",
      "OU": "develop"
    }
  ]
}
EOF
  • 签发server证书与key
cfssl gencert -ca ca.pem -ca-key ca-key.pem -config ca-config.json -profile docker server-csr.json | cfssljson -bare server
  • 客户端证书
  • 客户端证书的配置中除了没有 hosts 字段,其他与生成服务端证书一样。
cat > client-csr.json << EOF
{
  "CN": "Docker Client",
  "key": {
    "algo": "rsa",
    "size": 2048
  },
  "names": [
    {
      "C": "CN",
      "ST": "Beijing",
      "L": "Beijing",
      "O": "Company Name",
      "OU": "develop"
    }
  ]
}
EOF
cfssl gencert -ca ca.pem -ca-key ca-key.pem -config ca-config.json -profile docker client-csr.json | cfssljson -bare client
  • 权限 各种key自己可读:
chmod -v 0400 ca-key.pem server-key.pem client-key.pem
  • 权限 外证书任何人都可以读:
chmod -v 0444 ca.pem server.pem client.pem
  • 拷贝所有文件到当前目录
docker cp cfssl_TSL://workdir/production_tsl .

配置docker,看参考文章

主要参考文章 zhuanlan.zhihu.com/p/96110776