web-dev-qa-db-ja.com

IP SANが含まれていないため、<ip-address>の証明書を検証できません

DockerスタックをデプロイするGitLab CIパイプラインに取り組んでいます。 $ DOCKER_Hostをtcp://DROPLET_IP:2377に設定しようとしていますが、証明書にIP SANが含まれていないというエラーが表示されます。私はDigital Ocean Dropletでテストしているので、まだ私の液滴のドメイン名を設定していません。

deploy:
  stage: deploy
  image: docker:stable
  services:
    - docker:dind
  variables:
    DOCKER_Host: "tcp://$DROPLET_IP:2377"
    DOCKER_TLS_VERIFY: 1
  before_script:
    - mkdir -p ~/.docker
    - echo "$TLS_CA_CERT" > ~/.docker/ca.pem
    - echo "$TLS_CERT" > ~/.docker/cert.pem
    - echo "$TLS_KEY" > ~/.docker/key.pem
  script:
    - docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" "$CI_REGISTRY"
    - docker info
    - docker stack deploy --with-registry-auth --compose-file=docker-stack.yml mystack

これが、GitLab CIジョブの出力で発生するエラーです。

$ docker login -u gitlab-ci-token -p "$CI_JOB_TOKEN" "$CI_REGISTRY"
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
error during connect: Post https://<ip-address>:2377/v1.39/auth: x509: cannot validate certificate for <ip-address> because it doesn't contain any IP SANs

上記のdeployステージで使用しようとしている証明書(ca.pemserver-cert.pemおよびserver-key.pem)を生成するために、次のコマンドセットを使用しています。 GitLab CIで使用されている変数にTLS_CA_CERTTLS_CERTTLS_KEYを保存しました。

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

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

openssl genrsa -out server-key.pem 4096

openssl req -subj "/CN=<ip-address>" -sha256 -new -key server-key.pem -out server.csr

echo subjectAltName = IP:<ip-address> >> extfile.cnf

echo extendedKeyUsage = serverAuth >> extfile.cnf

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

subjectAltNameにIPアドレスが含まれているようです

echo subjectAltName = IP:<ip-address> >> extfile.cnf

確認してください ここにあるように 、これが構成の問題である場合:

SubjectAltNameを間違ったセクションに配置しました。作業方法:基本的に、openssl.cnfを編集しました。セクション[v3_ca]で、「subjectAltName = IP:192.168.2.107」を追加しました。
新しい証明書を作成し、サーバー+クライアントに追加しました。

拡張機能がv3_ca部分で ここに表示 のように宣言されていることを確認する必要があります。

2
VonC