概要

通信ブロッキングツール(お仕事中にえっちなサイトとか見れなくするやつ)を導入済みのWindows PCのWSL(Debian)で、Dockerイメージのビルドを実行した際に、ホスト側のWindowsにインストールされたブロッキングツールの証明書を参照出来ないため、 cdn.amazonlinux.comとかのSSL証明書チェーンを信頼出来ないと怒られて、WSL上でのDockerビルドがブロックされてしまう、という問題が発生したので対処した時のメモ

エラー: ファイル内容(修正前)

amazonlinuxにssm-agentを入れただけの単純なやつ

Dockerfile

1
2
3
4
5
6
7
8
FROM public.ecr.aws/amazonlinux/amazonlinux:2023

RUN yum update -y \
&& yum install -y amazon-ssm-agent \
&& yum clean all

CMD ["tail", "-f", "/dev/null"]
`

docker-compose.yml

1
2
3
4
5
6
services:

amazonlinux-with-ssm-agent:
image: amazonlinux-with-ssm-agent:latest
build:
context: .

エラー: ビルドログ(修正前)

以下のエラー

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
$ docker -v
Docker version 28.5.1, build e180ab8

$ docker compose build
[+] Building 5.2s (6/6) FINISHED
=> [internal] load local bake definitions 0.0s
=> => reading from stdin 591B 0.0s
=> [internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 341B 0.0s
=> [internal] load metadata for public.ecr.aws/amazonlinux/amazonlinux:2023 1.6s
=> [internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> CACHED [1/2] FROM public.ecr.aws/amazonlinux/amazonlinux:2023@sha256:f5ca6cafc706233c641ad838e738047389943afd3585cb1df7eedfc4d9b1799d 0.1s
=> => resolve public.ecr.aws/amazonlinux/amazonlinux:2023@sha256:f5ca6cafc706233c641ad838e738047389943afd3585cb1df7eedfc4d9b1799d 0.0s
=> ERROR [2/2] RUN yum update -y && yum install -y amazon-ssm-agent && yum clean all 3.1s
------
> [2/2] RUN yum update -y && yum install -y amazon-ssm-agent && yum clean all:
1.751 Amazon Linux 2023 repository 0.0 B/s | 0 B 00:01
1.752 Errors during downloading metadata for repository 'amazonlinux':
1.752 - Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate]
1.752 Error: Failed to download metadata for repo 'amazonlinux': Cannot prepare internal mirrorlist: Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate]
1.752 Ignoring repositories: amazonlinux
1.853 Dependencies resolved.
1.854 Nothing to do.
1.855 Complete!
2.956 Amazon Linux 2023 repository 0.0 B/s | 0 B 00:00
2.956 Errors during downloading metadata for repository 'amazonlinux':
2.956 - Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate]
2.956 Error: Failed to download metadata for repo 'amazonlinux': Cannot prepare internal mirrorlist: Curl error (60): SSL peer certificate or SSH remote key was not OK for https://cdn.amazonlinux.com/al2023/core/mirrors/2023.9.20251117/x86_64/mirror.list?instance_id=none [SSL certificate problem: unable to get local issuer certificate]
2.957 Ignoring repositories: amazonlinux
2.958 No match for argument: amazon-ssm-agent
2.972 Error: Unable to find a match: amazon-ssm-agent
------
Dockerfile:7
--------------------
6 |
7 | >>> RUN yum update -y \
8 | >>> && yum install -y amazon-ssm-agent \
9 | >>> && yum clean all
10 |
--------------------

failed to solve: process "/bin/sh -c yum update -y && yum install -y amazon-ssm-agent && yum clean all" did not complete successfully: exit code: 1

どうしたらいいの?

証明書をDockerビルド時にだけ読み込ませてあげれば良いっぽいのだけど、他社のcrtはイメージに入れたくないし、ビルド時だけ読み込ませるにはどうしたらいいの?とAIに聞いたら、 BuildKitのシークレット機能を使って、ビルド時だけマウントすると良いよ とのこと

対処1: Windowsから証明書をエクスポートしてくる

ブロッキングツールが発行してるルート証明書を、Windowsの証明書ストアからエクスポートしてきます。このへんはツールによるので端折りますが、ブラウザとかで証明書の発行者とか見たら、CAの名前が判明しました

001

対処2: docker-compose.ymlの修正

/usr/local/share/ca-certificates/の部分は、私がこのPathにcrtを置いてただけで任意です

1
2
3
4
5
6
7
8
9
10
11
12
services:
amazonlinux-with-ssm-agent:
image: amazonlinux-with-ssm-agent:latest
build:
context: .
secrets: // 追加
- hoge_ca // 追加

// 追加
secrets:
hoge_ca:
file: /usr/local/share/ca-certificates/hoge.crt // [対処1]でエクスポートしてきた証明書(hoge.crt)

対処3: Dockerfileの修正

/etc/pki/ca-trust/source/anchors/の部分は、amazonlinux2023の場合のPathです

1
2
3
4
5
6
7
8
9
FROM public.ecr.aws/amazonlinux/amazonlinux:2023

RUN --mount=type=secret,id=hoge_ca,target=/etc/pki/ca-trust/source/anchors/hoge.crt \
update-ca-trust extract \
&& yum update -y \
&& yum install -y amazon-ssm-agent \
&& yum clean all

CMD ["tail", "-f", "/dev/null"]

対処4: ビルド

1
$ docker compose build

イメージ内に証明書が残っていないか確認

1
2
$ dc run --rm amazonlinux-with-ssm-agent ls -a /etc/pki/ca-trust/source/anchors/hoge.crt
ls: cannot access '/etc/pki/ca-trust/source/anchors/hoge.crt': No such file or directory