自己署名証明書を使用してエージェントを実行する

Azure DevOps Server 2022 - Azure DevOps Server 2019

このトピックでは、自己署名証明書を使用して自己ホストエージェントを実行する方法について説明します。

Note

この文書は、エージェントバージョン2.x以降に適用されます。

SSL サーバー証明書を操作する

Enter server URL > https://corp.tfs.com/tfs
Enter authentication type (press enter for Integrated) >
Connecting to server ...
An error occurred while sending the request.

エージェント診断ログには、次の内容が表示されます。

[2017-11-06 20:55:33Z ERR  AgentServer] System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.Http.WinHttpException: A security error occurred

このエラーは、TFS サーバーで使用したサーバー証明書がビルド マシンによって信頼されていないことを示している可能性があります。 自己署名 SSL サーバー証明書を OS 証明書ストアに確実にインストールしてください。

Windows: Windows certificate store
Linux: OpenSSL certificate store
macOS: OpenSSL certificate store for agent version 2.124.0 or below
       Keychain for agent version 2.125.0 or above

いくつかのコマンドを実行して、証明書が正しくインストールされているかどうかを簡単に確認できます。 要求に対して 401 を取得した場合でも、SSL ハンドシェイクが正しく完了している限り、適切である必要があります。

Windows: PowerShell Invoke-WebRequest -Uri https://corp.tfs.com/tfs -UseDefaultCredentials 
Linux: curl -v https://corp.tfs.com/tfs 
macOS: curl -v https://corp.tfs.com/tfs (agent version 2.124.0 or below, curl needs to be built for OpenSSL)
       curl -v https://corp.tfs.com/tfs (agent version 2.125.0 or above, curl needs to be built for Secure Transport)

アクセス許可がない、またはカスタマイズされた Linux マシンであるなど、さまざまな理由で証明書をマシンの証明書ストアに正常にインストールできない場合。 エージェント バージョン 2.125.0 以降では、SSL サーバー証明書の検証エラーを無視できます。

重要

これはセキュリティで保護されておらず、推奨されません。証明書をマシンの証明書ストアにインストールすることを強くお勧めします。

エージェントの構成中に --sslskipcertvalidation を渡します

./config.cmd/sh --sslskipcertvalidation

注意

Linux および macOS でこのフラグを使用する場合は制限があります
Linux または macOS マシン上の libcurl ライブラリは、OpenSSL を使用してビルドする必要があります。詳細情報

Git のソースの取得が SSL 証明書の問題で失敗する (Windows エージェントのみ)

Windows エージェントの一部としてコマンドライン Git が搭載されています。 Git 関連のすべての操作には、この Git のコピーを使用します。 オンプレミスの TFS サーバーの自己署名 SSL 証明書がある場合は、その自己署名 SSL 証明書を許可するように搭載されている Git を構成してください。 この問題を解決するには、2 つの方法があります。

  1. エージェントがユーザーとして実行する場合に、次の git 構成をグローバル レベルで設定してください。

    git config --global http."https://tfs.com/".sslCAInfo certificate.pem
    

    注意

    システム レベルでの Git 構成の設定は、Windows では信頼できません。 システムの .gitconfig ファイルは、パッケージ化されている Git のコピーと共に格納されます。これは、エージェントが新しいバージョンにアップグレードされるたびに置き換えられます。

  2. 2.129.0またはそれ以降のバージョンのエージェントパスSChannelで、エージェントのコンフィギュレーション中に設定で--gituseschannelを使用するようにgitを有効にする

    ./config.cmd --gituseschannel
    

    Note

    Git SChannel では、自己署名証明書の要件がさらに制限されています。 IISまたはPowerShellコマンドによって生成された自己歌唱証明書は、SChannelでは使用できない場合があります。

SSL クライアント証明書を使用する

IISにはSSL設定があり、Azure DevOpsサーバへのすべての着信要求が必要です。または、TFSは通常のクレデンシャルに加えてクライアント証明書を提示する必要があります。

IIS SSL設定を有効にした場合は、2.125.0以上のバージョンエージェントを使用し、Azure DevOpsまたはTFSサーバに対して製造機械を設定するために次の追加手順を実行する必要があります。

  • 必要なすべての証明書情報を準備する

    • .pem形式のCA証明書(このファイルには、CA証明書の公開鍵と署名を含める必要があり、ルートCA証明書とすべての中間CA証明書を1つの.pemファイルにまとめる必要がある)
    • .pem形式のクライアント証明書(クライアント証明書の公開キーと署名を含む必要がある)
    • .pem形式のクライアント証明書秘密キー(クライアント証明書の秘密キーのみ含む必要がある)
    • .pfx形式のクライアント証明書アーカイブパッケージ(クライアント証明書の署名、公開キー、および秘密キーを含む必要がある)
    • クライアント証明書の秘密キーとクライアント証明書アーカイブ パッケージの両方にクライアント証明書の秘密キーが含まれているため、SAME パスワードを使用して保護する
  • CA 証明書をマシン証明書ストアにインストールする

    • Linux: OpenSSL 証明書ストア
    • macOS: システムまたはユーザー キーチェーン
    • Windows: Windows 証明書ストア
  • エージェントの構成中に --sslcacert--sslclientcert--sslclientcertkey--sslclientcertarchive--sslclientcertpassword を渡す。

    .\config.cmd/sh --sslcacert ca.pem --sslclientcert clientcert.pem --sslclientcertkey clientcert-key-pass.pem --sslclientcertarchive clientcert-archive.pfx --sslclientcertpassword "mypassword"
    

    クライアント証明書の秘密キー パスワードは、各プラットフォームに安全に格納されます。

    Linux: Encrypted with a symmetric key based on the machine ID
    macOS: macOS Keychain
    Windows: Windows Credential Store
    

エージェント クライアント証明書のサポートについて詳しく学習します。