Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Azure DevOps Server | Azure DevOps Server 2022
En este artículo se explica cómo ejecutar un agente autohospedado con un certificado autofirmado para Azure Pipelines y Azure DevOps Server.
Trabajar con un certificado de servidor 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.
El registro de diagnóstico del agente muestra:
[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
El error de seguridad anterior podría indicar que la máquina de compilación no confía en el certificado de servidor que usó en la máquina host de Azure Devops Server. Asegúrese de instalar el certificado de servidor SSL autofirmado en el almacén de certificados del sistema operativo.
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
Puede comprobar fácilmente si el certificado está instalado correctamente ejecutando algunos comandos. Siempre que el protocolo de enlace SSL finalice correctamente (incluso si obtiene un 401 para la solicitud), la instalación se realizó correctamente.
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)
Si no puede instalar correctamente el certificado en el almacén de certificados de la máquina por varios motivos (como no tiene los permisos correctos o está en una máquina Linux personalizada), hay otra opción. La versión 2.125.0 o posterior del agente tiene la capacidad de omitir un error de validación de certificados de servidor SSL.
Importante
No se recomienda omitir los errores de validación de certificados de servidor SSL. No es seguro. Se recomienda encarecidamente instalar el certificado en el almacén de certificados de la máquina.
Pase --sslskipcertvalidation durante el proceso de configuración del agente.
./config.cmd/sh --sslskipcertvalidation
Nota:
Para usar el --sslskipcertvalidation indicador en Linux y macOS, la biblioteca en tu máquina Linux o macOS debe compilarse con OpenSSL.
Problema: se produce un error en el comando Obtener orígenes de Git con un certificado SSL (solo agente de Windows)
Se envía Git de línea de comandos como parte del agente de Windows y se usa esta copia de Git para todas las operaciones relacionadas con Git. Cuando tenga un certificado SSL autofirmado para su máquina de Azure DevOps Server en instalaciones locales, configure el Git proporcionado para permitir éste.
Hay dos maneras de resolver este problema:
Establezca lo siguiente
git configa nivel global configurando la ejecución del agente como usuario.git config --global http."https://tfs.com/".sslCAInfo certificate.pemNota:
Establecer un nivel
git configde sistema no es confiable en Windows. El archivo del sistema.gitconfigse almacena con la copia de Git que hemos empaquetado. El Git empaquetado se reemplaza cada vez que el agente se actualiza a una nueva versión.Habilite git para usar
SChanneldurante la configuración cuando use un agente de versión 2.129.0 o posterior. Pase--gituseschanneldurante la configuración del agente../config.cmd --gituseschannelNota:
Git
SChanneltiene requisitos más restrictivos para el certificado autofirmado. Un certificado autofirmado que genera un comando de Internet Information Services (IIS) o PowerShell podría no ser compatible conSChannel.
Trabajar con un certificado de cliente SSL
IIS tiene una configuración SSL que requiere que todas las solicitudes entrantes a Azure DevOps Server deben presentar un certificado de cliente y la credencial normal.
Cuando la configuración de SSL de IIS está habilitada, debe usar la versión 2.125.0 o posterior y seguir los siguientes pasos adicionales para configurar la máquina de compilación en azure DevOps Server.
Prepare toda la información de certificado necesaria:
- Un certificado de entidad de certificación (CA) en
.pemformato: este archivo debe contener la clave pública y la firma del certificado de entidad de certificación. Debe colocar el certificado de la entidad de certificación raíz y todos los certificados de CA intermedios dentro de un archivo.pem. - Un certificado de cliente en
.pemformato: este archivo debe contener la clave pública y la firma del certificado de cliente. - Una clave privada de certificado de cliente en
.pemformato: este archivo debe contener solo la clave privada del certificado de cliente. - Un paquete de archivo de certificado de cliente en
.pfxformato: este archivo debe contener la firma, la clave pública y la clave privada del certificado de cliente. - Contraseña: use la misma contraseña para proteger la clave privada del certificado de cliente y el paquete de archivo de certificados de cliente, ya que ambos tienen la clave privada del certificado de cliente.
- Un certificado de entidad de certificación (CA) en
Instale un certificado de Autoridad de Certificación en el almacén de certificados de máquina:
- Linux: almacén de certificados de OpenSSL
- macOS: cadena de claves del sistema o del usuario
- Windows: Almacén de certificados de Windows
Pase
--sslcacert,--sslclientcert,--sslclientcertkey.--sslclientcertarchive,--sslclientcertpasswordy durante la configuración del agente..\config.cmd/sh --sslcacert ca.pem --sslclientcert clientcert.pem --sslclientcertkey clientcert-key-pass.pem --sslclientcertarchive clientcert-archive.pfx --sslclientcertpassword "mypassword"La contraseña de clave privada del certificado de cliente se almacena de forma segura en cada plataforma.
Linux: Encrypted with a symmetric key based on the machine ID macOS: macOS Keychain Windows: Windows Credential Store
Comprobación de la confianza de la entidad de certificación raíz
El agente de compilación usa Node.js, que se basa en su propio almacén de certificados, que se deriva de los certificados raíz de confianza de Mozilla. El almacén de certificados de autoridad de Node.js debe reconocer como confiable cualquier certificado raíz que utilice para la comunicación segura. De lo contrario, es posible que reciba los siguientes errores después de actualizar un certificado en la máquina de Azure DevOps Server:
- "no se puede obtener el certificado del emisor local"
- Certificado autofirmado en la cadena
- "no se puede comprobar el primer certificado"
Puede usar la tls.rootCertificates matriz para comprobar las CA raíz de confianza que usa para comprobar las conexiones TLS/SSL.
# Sample script to extract Node.js root certificates using Node.js.
node -e '
const tls = require("tls");
console.log(tls.rootCertificates.join("\n"));
' > "$ROOT_CERTS_FILE"
La NODE_EXTRA_CA_CERTS variable de entorno, introducida en Node v7.3.0, permite especificar un archivo que contenga uno o varios certificados de ENTIDAD de certificación en los que confía Node (además del conjunto predeterminado).
NODE_EXTRA_CA_CERTS anexa al almacén de confianza.
En el servidor o ca, exporte los certificados raíz (y los intermedios, si es necesario) como un archivo codificado en PEM. Este formato es un archivo de texto con datos Base64 y
-----BEGIN CERTIFICATE-----. Asegúrese de usar PEM codificado en Base64 y no DER. (En Windows, los archivos .cer pueden ser de dos tipos; puede renombrarlos como .pem para evitar confusiones. El archivo puede tener cualquier extensión realmente, pero .pem o .crt son las extensiones estándar).Si tiene varias CA internas (una cadena), puede concatenarlas en un archivo. Node lee todos los certificados de ese archivo.
Haga que el PEM esté disponible en el agente de compilación colocándolo en una ruta de acceso conocida (por ejemplo,
C:\certs\CorpRootCA.pem or /etc/ssl/certs/CorpRootCA.pem).Establezca una variable de entorno del sistema operativo,
NODE_EXTRA_CA_CERTS, que apunte al archivo PEM. Por ejemplo, puede usar PowerShell en Windows:
[Environment]::SetEnvironmentVariable("NODE_EXTRA_CA_CERTS", "C:\certs\CorpRootCA.pem", "Machine")
Contenido relacionado
Obtenga más información sobre la compatibilidad con certificados de cliente del agente.