Gitlab-Server の証明書はサブジェクト代替名に対して無効です

Gitlab-Server の証明書はサブジェクト代替名に対して無効です

私の会社は、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発行者証明書がないようです。

クライアントとサーバーに適切なルート証明書と中間証明書がない場合、検証エラーが発生する可能性があります。

すべてのクライアントがチェーン内のすべての証明書を取得できるように、常にサーバーに完全なチェーンをインストールするようにしています。

いくつかの選択肢があります。

  1. 完全なチェーンを からエクスポートしdata.ddl.at、 にインポートしますgitlab.ddl.at

  2. OpenSSLなどのツールを使用してチェーンを1つの証明書に結合し、インストールします。gitlab.ddl.at

  3. チェーン内のすべての証明書をサーバーにインストールします。

関連情報