
私の会社は、https://data.ddl.atには、SAN(Subject Alternative Name)がありますgitlab.ddl.at
。このGitlabサーバーは内部のものであり、ドメイン名は内部DNSサーバーによってのみ解決されます。参考までに、SANもあります。https://sicher.ddl.atは公開されており、ブラウザで有効です。
この証明書を Gitlab サーバー上で構成し、 にアクセスするとgitlab.ddl.at
、証明書はブラウザーによって検証され、有効であるとみなされます。
Gitlab-Runner を使用しようとすると、問題が発生します。別のマシンにインストールして登録しましたが、最初はいくつか問題が発生した後、メイン インスタンスに接続できましたが、ジョブは依然としてサブモジュールをチェックアウトできず、ランナーがserver certificate verification failed
.
ここで、問題の根本的な症状と思われるものを示します。 を実行するとopenssl s_client -connect data.ddl.at:443
、次のようになります。
CONNECTED(00000005)
depth=2 OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
verify return:1
depth=1 C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
verify return:1
depth=0 businessCategory = Private Organization, serialNumber = FN 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Str. 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
verify return:1
---
Certificate chain
0 s:businessCategory = Private Organization, serialNumber = FN 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Str. 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
1 s:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
i:OU = GlobalSign Root CA - R3, O = GlobalSign, CN = GlobalSign
---
Server certificate
[...]
そして最後に:Verify return code: 0 (ok)
を実行するとopenssl s_client -connect gitlab.ddl.at:443
、次のようになります:
CONNECTED(00000005)
depth=0 businessCategory = Private Organization, serialNumber = 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Stra\C3\9Fe 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 businessCategory = Private Organization, serialNumber = 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Stra\C3\9Fe 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:businessCategory = Private Organization, serialNumber = 374566h, jurisdictionC = AT, jurisdictionL = Wels, jurisdictionST = Oberoesterreich, C = AT, ST = Oberoesterreich, L = Ruestorf, street = Erwin Greiner-Stra\C3\9Fe 4, OU = GIS, O = DDL GmbH, CN = data.ddl.at
i:C = BE, O = GlobalSign nv-sa, CN = GlobalSign Extended Validation CA - SHA256 - G3
---
Server certificate
[...]
最初のエラーは ですunable to get local issuer certificate
。
パブリックにアクセス可能な でこれを試してみましたがsicher.ddl.at
、 と同じエラーが発生しましたgitlab.ddl.at
。
取得する証明書は 用ですdata.ddl.at
が、SAN が含まれていますgitlab.ddl.at
。これで有効になるのではないですか? 何が間違っているのでしょうか?
答え1
のサーバーにgitlab.ddl.at
発行者証明書がないようです。
クライアントとサーバーに適切なルート証明書と中間証明書がない場合、検証エラーが発生する可能性があります。
すべてのクライアントがチェーン内のすべての証明書を取得できるように、常にサーバーに完全なチェーンをインストールするようにしています。
いくつかの選択肢があります。
完全なチェーンを からエクスポートし
data.ddl.at
、 にインポートしますgitlab.ddl.at
。OpenSSLなどのツールを使用してチェーンを1つの証明書に結合し、インストールします。
gitlab.ddl.at
チェーン内のすべての証明書をサーバーにインストールします。