check-certificat.com check-certificat.com check-certificat.com / chkcert_V1R1M1.py chkcert_V1R1M1.py chkcert_V1R1M1.py
prerequisites_V1R1M1.html MAJ 17.07.2026 Updated 2026-07-17 Act. 17.07.2026
Prérequis communs Common prerequisites Requisitos comunes
  • Python 3.9+
    Le script utilise des annotations de type modernes (list[str]) et des dataclasses avec field(). The script uses modern type annotations (list[str]) and dataclasses with field(). El script utiliza anotaciones de tipo modernas (list[str]) y dataclasses con field().
  • cryptography pip install cryptography
    Cœur de l'analyse X.509 — parsing, vérification de signature, extraction des extensions. Core of the X.509 analysis — parsing, signature verification, extension extraction. Núcleo del análisis X.509 — parsing, verificación de firma, extracción de extensiones.
  • paramiko optionneloptionalopcional pip install paramiko
    Nécessaire uniquement pour --remote (récupération de certificats via SSH/SFTP). Only required for --remote (certificate retrieval over SSH/SFTP). Necesario únicamente para --remote (recuperación de certificados vía SSH/SFTP).
  • constantes_V1R1M1.properties optionneloptionalopcional
    Placé dans properties/ au même niveau que le script/exécutable. Absent = valeurs par défaut du script utilisées silencieusement. Placed in properties/ next to the script/binary. Missing = the script's built-in defaults are used silently. Colocado en properties/ al mismo nivel que el script/ejecutable. Ausente = se usan silenciosamente los valores por defecto del script.
  • properties/class_bcolors.py optionneloptionalopcional
    Personnalisation de la palette de couleurs ANSI. Chargé dynamiquement mais contrôlé avant exécution. ANSI colour palette customisation. Loaded dynamically but checked before execution. Personalización de la paleta de colores ANSI. Cargado dinámicamente pero verificado antes de ejecutarse.
  • properties/licence.key optionnel — Enterpriseoptional — Enterpriseopcional — Enterprise
    Licence complète, verrouillée par organisation. Sans ce fichier, l'outil fonctionne en mode trial (30 jours / 50 fichiers). Full licence, locked to an organisation. Without this file, the tool runs in trial mode (30 days / 50 files). Licencia completa, vinculada a una organización. Sin este fichero, la herramienta funciona en modo trial (30 días / 50 ficheros).
  • Accès en écriture au profil applicatif utilisateurWrite access to the user application profileAcceso de escritura al perfil de aplicación del usuario mode trial uniquementtrial mode onlysolo modo trial
    Hors dossier d'installation, distinct de W_FLD_TARGET_ANA_CER/U_FLD_TARGET_ANA_CER. Nécessaire uniquement en l'absence de licence.key valide — voir le bilan de protection. Outside the install folder, distinct from W_FLD_TARGET_ANA_CER/U_FLD_TARGET_ANA_CER. Only needed in the absence of a valid licence.key — see the protection overview. Fuera de la carpeta de instalación, distinto de W_FLD_TARGET_ANA_CER/U_FLD_TARGET_ANA_CER. Solo necesario en ausencia de un licence.key válido — ver el balance de protección.
Téléchargement des prérequis Prerequisite downloads Descarga de prerrequisitos
JDK 25.0.3+9 Windows ↓ .zip↓ .zip↓ .zip
Microsoft OpenJDK 25.0.3 Windows ↓ .zip↓ .zip↓ .zip
GSKit8 Windows ↓ .zip↓ .zip↓ .zip
IBM MQC Redist 9.4.5.1 Windows ↓ .zip↓ .zip↓ .zip
IBM MQC Redist 9.4.0.21 Windows ↓ .zip↓ .zip↓ .zip
IBM MQC Redist 9.4.5.1 Linux x64 ↓ .tar.gz↓ .tar.gz↓ .tar.gz
WinPython 3.12.101 Windows ↓ .zip↓ .zip↓ .zip
chk_feature_V1R1 script de diagnosticdiagnostic scriptscript de diagnóstico ↓ .zip↓ .zip↓ .zip
Par plateforme Per platform Por plataforma
Windows
JDK / JREJDK / JREJDK / JRE keytool.exe dans le PATH (pour .p12, .jks, .pfx, .p7b, cacerts) — fourni par tout JDK (Temurin, OpenJDK, Oracle). Sur JDK 25.0.3+, chkcert utilise automatiquement le flag -cacerts dédié plutôt que -keystore pour éviter un échec introduit par les builds keytool récents — aucune action requise côté utilisateur. keytool.exe in the PATH (for .p12, .jks, .pfx, .p7b, cacerts) — bundled with any JDK (Temurin, OpenJDK, Oracle). On JDK 25.0.3+, chkcert automatically uses the dedicated -cacerts flag instead of -keystore to work around a failure introduced by recent keytool builds — no user action required. keytool.exe en el PATH (para .p12, .jks, .pfx, .p7b, cacerts) — incluido en cualquier JDK (Temurin, OpenJDK, Oracle). En JDK 25.0.3+, chkcert usa automáticamente el flag dedicado -cacerts en lugar de -keystore para evitar un fallo introducido por las builds recientes de keytool — no requiere ninguna acción del usuario.
MQ Client / GSKitMQ Client / GSKitMQ Client / GSKit runmqakm.exe (préféré) ou gsk8capicmd_64.exe/gsk8capicmd.exe dans le PATH (pour .kdb, .cms). Nécessite aussi lib64\ dans le PATH pour les DLL ICC. runmqakm.exe (preferred) or gsk8capicmd_64.exe/gsk8capicmd.exe in the PATH (for .kdb, .cms). Also requires lib64\ in the PATH for ICC DLLs. runmqakm.exe (preferido) o gsk8capicmd_64.exe/gsk8capicmd.exe en el PATH (para .kdb, .cms). También requiere lib64\ en el PATH para las DLL ICC.
Runtime DLLRuntime DLLRuntime DLL Visual C++ Redistributable pour Visual Studio 2013 (x64) — requis spécifiquement par runmqakm.exe/GSKit (msvcr120.dll, msvcp120.dll), indépendamment de la version 2015-2022 déjà nécessaire pour chkcert.exe lui-même. Installer vc_redist.x64.exe depuis la page officielle Microsoft, section « Visual Studio 2013 » — les deux versions (2013 et 2015-2022) coexistent sans conflit et sont toutes deux nécessaires. Visual C++ Redistributable for Visual Studio 2013 (x64) — specifically required by runmqakm.exe/GSKit (msvcr120.dll, msvcp120.dll), independently of the 2015-2022 version already needed by chkcert.exe itself. Install vc_redist.x64.exe from the official Microsoft page, "Visual Studio 2013" section — both versions (2013 and 2015-2022) coexist without conflict and are both required. Visual C++ Redistributable para Visual Studio 2013 (x64) — requerido específicamente por runmqakm.exe/GSKit (msvcr120.dll, msvcp120.dll), independientemente de la versión 2015-2022 ya necesaria para chkcert.exe. Instalar vc_redist.x64.exe desde la página oficial de Microsoft, sección "Visual Studio 2013" — ambas versiones (2013 y 2015-2022) coexisten sin conflicto y ambas son necesarias.
Compilation .exe.exe buildCompilación .exe
optionneloptionalopcional
MSVC (Visual Studio Build Tools) ou MinGW64 (--mingw64) — via Nuitka. Sur poste sans accès Internet, Nuitka télécharge normalement le toolchain MinGW64 lui-même : prévoir une version figée pré-positionnée dans son cache local si le réseau est restreint. MSVC (Visual Studio Build Tools) or MinGW64 (--mingw64) — via Nuitka. On a machine without Internet access, Nuitka normally downloads the MinGW64 toolchain itself: pre-stage a pinned version in its local cache if the network is restricted. MSVC (Visual Studio Build Tools) o MinGW64 (--mingw64) — vía Nuitka. En un equipo sin acceso a Internet, Nuitka normalmente descarga el toolchain MinGW64 por sí mismo: prepara una versión fijada en su caché local si la red está restringida.
Droits d'écritureWrite accessPermisos de escritura Sur properties/, et sur W_FLD_TARGET_ANA_CER (sortie JSON/HTML/log_error). On properties/, and on W_FLD_TARGET_ANA_CER (JSON/HTML/log_error output). Sobre properties/, y sobre W_FLD_TARGET_ANA_CER (salida JSON/HTML/log_error).
⚠️ Sur VDI sans accès Internet, Nuitka refuse d'utiliser un GCC/MinGW64 déjà présent dans le PATH — il exige une build winlibs-gcc pinnée très précisément (numéro de version exact) et tente de la télécharger automatiquement depuis GitHub à chaque compilation. Sans réseau, l'échec se manifeste par une erreur getaddrinfo failed. ⚠️ On a VDI without Internet access, Nuitka refuses to use a GCC/MinGW64 already present in the PATH — it requires a very precisely pinned winlibs-gcc build (exact version number) and tries to download it automatically from GitHub on every build. With no network, this fails with a getaddrinfo failed error. ⚠️ En un VDI sin acceso a Internet, Nuitka se niega a usar un GCC/MinGW64 ya presente en el PATH — exige una build winlibs-gcc fijada con mucha precisión (número de versión exacto) e intenta descargarla automáticamente desde GitHub en cada compilación. Sin red, esto falla con un error getaddrinfo failed.
Correctif — pré-positionner le fichier en cacheFix — pre-stage the file in cacheSolución — prepositionar el fichero en caché
  1. Depuis un poste avec accès Internet, télécharger le fichier exact indiqué dans le message d'erreur de Nuitka (le numéro de version change selon la version de Nuitka installée), par exemple : From a machine with Internet access, download the exact file named in Nuitka's error message (the version number changes depending on the installed Nuitka version), for example: Desde un equipo con acceso a Internet, descargar el fichero exacto indicado en el mensaje de error de Nuitka (el número de versión cambia según la versión de Nuitka instalada), por ejemplo:
    https://github.com/brechtsanders/winlibs_mingw/releases/download/15.2.0posix-13.0.0-msvcrt-r6/winlibs-x86_64-posix-seh-gcc-15.2.0-mingw-w64msvcrt-13.0.0-r6.zip
  2. Copier ce .zip (sans le décompresser, ni le renommer) sur le VDI, exactement à l'emplacement de cache indiqué par Nuitka dans son message d'erreur : Copy that .zip (without extracting or renaming it) to the VDI, exactly at the cache path Nuitka reported in its error message: Copiar ese .zip (sin descomprimirlo ni renombrarlo) al VDI, exactamente en la ruta de caché indicada por Nuitka en su mensaje de error:
    %LOCALAPPDATA%\Nuitka\Nuitka\Cache\DOWNLO~1\gcc\x86_64\<version>\<fichier>.zip
  3. Relancer la même commande de compilation — Nuitka détecte le zip déjà présent, l'extrait lui-même localement, et n'effectue plus aucun appel réseau. Re-run the same build command — Nuitka detects the zip already there, extracts it locally itself, and no longer makes any network call. Volver a lanzar el mismo comando de compilación — Nuitka detecta el zip ya presente, lo extrae localmente por sí mismo, y ya no realiza ninguna llamada de red.
Le numéro de version winlibs-gcc attendu est lié à la version de Nuitka installée — une montée de version Nuitka peut nécessiter de répéter cette opération avec un nouveau nom de release. The expected winlibs-gcc version number is tied to the installed Nuitka version — upgrading Nuitka may require repeating this operation with a new release name. El número de versión winlibs-gcc esperado está ligado a la versión de Nuitka instalada — una actualización de Nuitka puede requerir repetir esta operación con un nuevo nombre de release.
Linux / macOS
JDK / JREJDK / JREJDK / JRE keytool dans le PATH (/usr/bin/keytool ou via JAVA_HOME). keytool in the PATH (/usr/bin/keytool or via JAVA_HOME). keytool en el PATH (/usr/bin/keytool o vía JAVA_HOME).
MQ Client / GSKitMQ Client / GSKitMQ Client / GSKit runmqakm (souvent /opt/mqm-redist/<version>/bin/ ou /opt/mqm/bin/) ou runmqckm/gsk8capicmd_64 dans le PATH. runmqakm (often /opt/mqm-redist/<version>/bin/ or /opt/mqm/bin/) or runmqckm/gsk8capicmd_64 in the PATH. runmqakm (a menudo /opt/mqm-redist/<version>/bin/ o /opt/mqm/bin/) o runmqckm/gsk8capicmd_64 en el PATH.
Locale / langueLocale / languageConfiguración regional / idioma Le script force -J-Duser.language=en (keytool) et -locale en (runmqakm) automatiquement — évite un bug JDK connu (JDK-8191137). The script forces -J-Duser.language=en (keytool) and -locale en (runmqakm) automatically — works around a known JDK bug (JDK-8191137). El script fuerza automáticamente -J-Duser.language=en (keytool) y -locale en (runmqakm) — evita un bug conocido del JDK (JDK-8191137).
gcc / patchelf
optionneloptionalopcional
sudo dnf install gcc patchelf (RHEL/AlmaLinux) — pas requis à l'exécution, seulement pour compiler un binaire via Nuitka. sudo dnf install gcc patchelf (RHEL/AlmaLinux) — not needed at runtime, only to build a Nuitka binary. sudo dnf install gcc patchelf (RHEL/AlmaLinux) — no necesario en tiempo de ejecución, solo para compilar un binario con Nuitka.
ccache
optionneloptionalopcional
Accélère les recompilations répétées — nécessite le dépôt EPEL sous RHEL. Speeds up repeated rebuilds — requires the EPEL repository on RHEL. Acelera las recompilaciones repetidas — requiere el repositorio EPEL en RHEL.
Droits d'écritureWrite accessPermisos de escritura Sur U_FLD_TARGET_ANA_CER (sortie), et /proc lisible (détection fiable du binaire compilé en mode onefile). On U_FLD_TARGET_ANA_CER (output), and readable /proc (reliable onefile-binary detection). Sobre U_FLD_TARGET_ANA_CER (salida), y /proc legible (detección fiable del binario compilado en modo onefile).
Environnements testés Tested environments Entornos probados
Versions concrètes de l'OS, Python, Nuitka et du compilateur C, capturées le 17.07.2026 via le script de diagnostic chk_feature_V1R1.sh sur chaque plateforme. Le pavé AlmaLinux renvoie vers un exemple complet de rapport d'environnement (outils requis à l'exécution du binaire compilé, sans prérequis Python). Concrete OS, Python, Nuitka and C compiler versions, captured on 2026-07-17 via the chk_feature_V1R1.sh diagnostic script on each platform. The AlmaLinux card links to a full sample environment report (tools required to run the compiled binary, no Python prerequisite). Versiones concretas del SO, Python, Nuitka y del compilador C, capturadas el 17.07.2026 mediante el script de diagnóstico chk_feature_V1R1.sh en cada plataforma. La tarjeta de AlmaLinux enlaza a un ejemplo completo de informe de entorno (herramientas necesarias para ejecutar el binario compilado, sin requisito de Python).
Windows 11 Enterprise
Version OSOS versionVersión del SO10.0.26200 (build 26200)(build 26200)(build 26200)
Red Hat Enterprise Linux 9.4
NoyauKernelKernel5.14.0-427.42.1.el9_4.x86_64
PythonPython3.9.18 Fedora Python
pippip26.0.1
NuitkaNuitka2.8.9
gccgcc11.4.1 (Red Hat 11.4.1-3)
Red Hat Enterprise Linux 9.6
NoyauKernelKernel5.14.0-570.62.1.el9_6.x86_64
PythonPython3.9.21 Fedora Python
pippip26.0.1
NuitkaNuitka2.8.9
gccgcc11.5.0 (Red Hat 11.5.0-5)
AlmaLinux 10.2 productionproductionproducción
NoyauKernelKernel6.12.0-211.32.1.el10_2.x86_64
PythonPython3.12.13 Fedora Python
pippip23.3.2
NuitkaNuitka4.1.3
gccgcc14.3.1 (Red Hat 14.3.1-4)
Unix génériqueGeneric UnixUnix genérico Ubuntu 26.04 LTS
NoyauKernelKernel7.0.0-14-generic
PythonPython3.14.4 Debian Python
pippip25.1.1
NuitkaNuitka4.1.3
gccgcc15.2.0 (Ubuntu 15.2.0-16ubuntu1)
Exemples de PATH validés Validated PATH examples Ejemplos de PATH validados
Windows — option 1 (IBM MQ Client complet) — option 1 (full IBM MQ Client) — opción 1 (IBM MQ Client completo)
C:\Tools\WPy64-312101\python
C:\Tools\WPy64-312101\python\Scripts
C:\Tools\jdk-25.0.3+9\bin
C:\Tools\IBM-MQC_9.4.5.1\bin64
C:\Tools\IBM-MQC_9.4.5.1\gskit8\bin
C:\Tools\IBM-MQC_9.4.5.1\gskit8\lib64
%PATH%
Windows — option 2 (GSKit autonome, sans MQ Client) — option 2 (standalone GSKit, no MQ Client) — opción 2 (GSKit independiente, sin MQ Client)
C:\Tools\WPy64-312101\python
C:\Tools\WPy64-312101\python\Scripts
C:\Tools\jdk-25.0.3+9\bin
C:\Tools\gskit8_64\bin
C:\Tools\gskit8_64\lib64
%PATH%
RHEL 9.4 — serveur MQSeries — MQSeries server — servidor MQSeries
/opt/mqm/bin
/opt/mqm/samp/bin
/opt/mqm/java/bin
/opt/mqm/gskit8/bin
Unix génériqueGeneric UnixUnix genérico — MQ Client redistribuable + JDK 25 — redistributable MQ Client + JDK 25 — MQ Client redistribuible + JDK 25
/opt/mqm-redist/9.4.5.1/bin
/usr/lib/jvm/java-25-openjdk/bin
Variante GSKit9 autonome : /opt/gskit9/bin, /opt/gskit9/lib64 Standalone GSKit9 variant: /opt/gskit9/bin, /opt/gskit9/lib64 Variante GSKit9 independiente: /opt/gskit9/bin, /opt/gskit9/lib64
Scripts Windows de positionnement du PATH Windows PATH setup scripts Scripts Windows de configuración del PATH
Deux scripts .cmd prêts à l'emploi ouvrent une invite de commandes avec le PATH déjà positionné selon l'une des deux options ci-dessus. Chacun vérifie l'existence de chaque répertoire avant de l'ajouter et affiche un état coloré (vert = présent, rouge = manquant) — les répertoires absents ne bloquent pas l'exécution, ils sont simplement signalés. Two ready-to-use .cmd scripts open a command prompt with the PATH already set for either option above. Each checks that every directory exists before adding it and prints a coloured status (green = present, red = missing) — missing directories don't block execution, they're simply flagged. Dos scripts .cmd listos para usar abren un símbolo del sistema con el PATH ya configurado según una de las dos opciones anteriores. Cada uno verifica que cada directorio exista antes de añadirlo y muestra un estado coloreado (verde = presente, rojo = ausente) — los directorios ausentes no bloquean la ejecución, simplemente se señalan.
Windows_Add_PATH_MQClient.cmd — option 1 (IBM MQ Client complet) — option 1 (full IBM MQ Client) — opción 1 (IBM MQ Client completo)
Voir le code du script View script code Ver el código del script
@echo off

REM ANSI colour setup (native, no PowerShell) - works on Windows 10 1909+ / Windows 11
REM ESC is generated at runtime rather than stored as a raw byte, to avoid
REM silent corruption if this file is later edited/saved with a different encoding.
for /F %%a in ('echo prompt $E^| cmd') do set "ESC=%%a"
set "GREEN=%ESC%[92m"
set "RED=%ESC%[91m"
set "YELLOW=%ESC%[93m"
set "RESET=%ESC%[0m"

REM # Install openjdk version "25.0.3" 2026-04-21 LTS
set JdkWI=C:\Tools\jdk-25.0.3+9\bin
REM Mandatory Microsoft Visual C++
REM # Install 9.4.5.1-IBM-MQC-Redist-Win64_lts
set MQClientWI=C:\Tools\IBM-MQC_9.4.5.1\bin64
set GSKitBinWI=C:\Tools\IBM-MQC_9.4.5.1\gskit8\bin
set GSKitLibWI=C:\Tools\IBM-MQC_9.4.5.1\gskit8\lib64
set GSKitWI=%GSKitBinWI%;%GSKitLibWI%

echo.
echo === Checking directories ===
set ALL_OK=1

call :check_dir "%JdkWI%"      "JDK"
call :check_dir "%MQClientWI%" "MQ Client"
call :check_dir "%GSKitBinWI%" "GSKit bin"
call :check_dir "%GSKitLibWI%" "GSKit lib64"

echo.
if "%ALL_OK%"=="1" (
    echo %GREEN%[OK] All directories are present.%RESET%
) else (
    echo %YELLOW%[WARNING] One or more directories are missing - PATH will be set anyway.%RESET%
)
echo.

set PATH=%JdkWI%;%MQClientWI%;%GSKitWI%;%PATH%

if exist "%JdkWI%" (
    cd /d "%JdkWI%"
) else (
    echo %YELLOW%[WARNING] JDK not found - keeping current directory.%RESET%
)

cmd
exit /b

:check_dir
if exist "%~1" (
    echo %GREEN%[OK]      %~2 : %~1%RESET%
) else (
    echo %RED%[MISSING] %~2 : %~1%RESET%
    set ALL_OK=0
)
exit /b
Windows_Add_PATH_Only_GsKit8.cmd — option 2 (GSKit autonome, sans MQ Client) — option 2 (standalone GSKit, no MQ Client) — opción 2 (GSKit independiente, sin MQ Client)
Voir le code du script View script code Ver el código del script
@echo off

REM ANSI colour setup (native, no PowerShell) - works on Windows 10 1909+ / Windows 11
REM ESC is generated at runtime rather than stored as a raw byte, to avoid
REM silent corruption if this file is later edited/saved with a different encoding.
for /F %%a in ('echo prompt $E^| cmd') do set "ESC=%%a"
set "GREEN=%ESC%[92m"
set "RED=%ESC%[91m"
set "YELLOW=%ESC%[93m"
set "RESET=%ESC%[0m"

REM # Install openjdk version "25.0.3" 2026-04-21 LTS
set JdkWI=C:\Tools\jdk-25.0.3+9\bin
REM Mandatory Microsoft Visual C++
REM # Install 9.4.5.1-IBM-MQC-Redist-Win64_lts
REM set MQClientWI=C:\Tools\IBM-MQC_9.4.5.1\bin64
set GSKitBinWI=C:\Tools\gskit8_64\bin
set GSKitLibWI=C:\Tools\gskit8_64\lib64
set GSKitWI=%GSKitBinWI%;%GSKitLibWI%

echo.
echo === Checking directories ===
set ALL_OK=1

call :check_dir "%JdkWI%"      "JDK"
call :check_dir "%GSKitBinWI%" "GSKit bin"
call :check_dir "%GSKitLibWI%" "GSKit lib64"

echo.
if "%ALL_OK%"=="1" (
    echo %GREEN%[OK] All directories are present.%RESET%
) else (
    echo %YELLOW%[WARNING] One or more directories are missing - PATH will be set anyway.%RESET%
)
echo.

set PATH=%JdkWI%;%GSKitWI%;%PATH%

if exist "%JdkWI%" (
    cd /d "%JdkWI%"
) else (
    echo %YELLOW%[WARNING] JDK not found - keeping current directory.%RESET%
)

cmd
exit /b

:check_dir
if exist "%~1" (
    echo %GREEN%[OK]      %~2 : %~1%RESET%
) else (
    echo %RED%[MISSING] %~2 : %~1%RESET%
    set ALL_OK=0
)
exit /b
Les chemins (JdkWI, MQClientWI, GSKitBinWI, GSKitLibWI) sont à adapter en tête de script selon l'installation réelle du poste. La coloration utilise des séquences ANSI natives (aucune dépendance externe) — le caractère ESC est généré à l'exécution via l'astuce prompt $E plutôt que stocké comme octet brut dans le fichier, pour éviter toute corruption silencieuse lors d'une future édition. Fonctionne nativement sur Windows 10 version 1909 et ultérieure, ainsi que sur Windows 11. The paths (JdkWI, MQClientWI, GSKitBinWI, GSKitLibWI) should be adjusted at the top of the script to match the actual machine's installation. Colouring uses native ANSI sequences (no external dependency) — the ESC character is generated at runtime via the prompt $E trick rather than stored as a raw byte in the file, to avoid silent corruption on future edits. Works natively on Windows 10 version 1909 and later, as well as Windows 11. Las rutas (JdkWI, MQClientWI, GSKitBinWI, GSKitLibWI) deben ajustarse al inicio del script según la instalación real del equipo. El coloreado usa secuencias ANSI nativas (sin dependencia externa) — el carácter ESC se genera en tiempo de ejecución mediante el truco prompt $E en lugar de almacenarse como byte crudo en el fichero, para evitar corrupción silenciosa en futuras ediciones. Funciona de forma nativa en Windows 10 versión 1909 y posteriores, así como en Windows 11.
Analyse distante SSH — mode --remote Remote SSH analysis — --remote mode Análisis remoto SSH — modo --remote
Le mode --remote s'appuie sur paramiko pour récupérer des certificats sur un serveur distant via SSH/SFTP. Pour un usage non interactif (scripts, cron), l'authentification doit se faire par échange de clés, sans mot de passe. The --remote mode relies on paramiko to retrieve certificates from a remote server over SSH/SFTP. For non-interactive use (scripts, cron), authentication must be key-based, without a password. El modo --remote se apoya en paramiko para recuperar certificados de un servidor remoto vía SSH/SFTP. Para un uso no interactivo (scripts, cron), la autenticación debe hacerse por intercambio de claves, sin contraseña.
La première connexion vers un nouvel hôte échoue sans --trust-new-host (host key SSH inconnue) — voir étape 4 ci-dessous pour l'alimenter en amont via known_hosts. Le timeout de connexion (--remote-timeout, défaut 30s) peut être augmenté pour un serveur distant ou lent. The first connection to a new host fails without --trust-new-host (unknown SSH host key) — see step 4 below to pre-populate it via known_hosts instead. The connection timeout (--remote-timeout, default 30s) can be increased for a slow or distant server. La primera conexión a un host nuevo falla sin --trust-new-host (clave de host SSH desconocida) — ver el paso 4 más abajo para prepoblarla vía known_hosts en su lugar. El timeout de conexión (--remote-timeout, por defecto 30s) puede aumentarse para un servidor lento o distante.
Cette section décrit uniquement la mise en place de l'échange de clés SSH. Elle ne traite pas de la saisie ou de l'affichage d'un mot de passe en clair. This section only covers setting up the SSH key exchange. It does not cover entering or displaying a plaintext password. Esta sección solo cubre la configuración del intercambio de claves SSH. No trata la introducción ni la visualización de una contraseña en texto claro.

1. Variables du scénario 1. Scenario variables 1. Variables del escenario

🔑 Plus simple à suivre : le générateur interactif d'échange de clés SSH calcule et affiche la procédure complète pour votre scénario (Unix↔Unix, Windows↔Unix, Windows↔Windows), sans avoir à adapter les commandes ci-dessous à la main. 🔑 Easier to follow: the interactive SSH key exchange generator computes and displays the full procedure for your scenario (Unix↔Unix, Windows↔Unix, Windows↔Windows), with no need to manually adapt the commands below. 🔑 Más fácil de seguir: el generador interactivo de intercambio de claves SSH calcula y muestra el procedimiento completo para su escenario (Unix↔Unix, Windows↔Unix, Windows↔Windows), sin necesidad de adaptar manualmente los comandos siguientes.
L'utilisateur distant peut être identique à l'utilisateur local, ou différent (compte de service dédié). Valables quel que soit l'OS du poste local ou du serveur distant. The remote user can be the same as the local user, or different (a dedicated service account). Applies regardless of the local machine's or remote server's OS. El usuario remoto puede ser el mismo que el local, o diferente (una cuenta de servicio dedicada). Válido sea cual sea el SO del equipo local o del servidor remoto.
RMT_SERVER="Remote_Server"	# Serveur distant# Remote server# Servidor remoto
LCL_USER="LCL_USER" 		# Utilisateur local# Local user# Usuario local
# ou# or# o
LCL_USER="user01" 			# Utilisateur local# Local user# Usuario local
# ou# or# o
LCL_USER="${USER}" 			# Utilisateur local# Local user# Usuario local

RMT_USER="${LCL_USER}"		# Utilisateur distant = utilisateur local# Remote user = local user# Usuario remoto = usuario local
# ou# or# o
RMT_USER="usrrmt01" # Utilisateur distant dédié# Dedicated remote user# Usuario remoto dedicado

2. Génération de la paire de clés (poste local) 2. Key pair generation (local machine) 2. Generación del par de claves (equipo local)

Effectuée une seule fois, sur le poste qui exécutera chkcert --remote. L'algorithme ed25519 est recommandé — plus rapide et plus robuste que RSA, supporté par toute version récente d'OpenSSH (Linux, AIX, et Windows 10/11 depuis OpenSSH intégré). Done once, on the machine that will run chkcert --remote. ed25519 is recommended — faster and stronger than RSA, supported by any recent OpenSSH version (Linux, AIX, and Windows 10/11 via built-in OpenSSH). Se realiza una sola vez, en el equipo que ejecutará chkcert --remote. Se recomienda ed25519 — más rápido y robusto que RSA, compatible con cualquier versión reciente de OpenSSH (Linux, AIX, y Windows 10/11 vía OpenSSH integrado).
🐧 Linux / AIX (bash)
ssh-keygen -t ed25519 -C "${LCL_USER}@$HOSTNAME" -f ~/.ssh/id_ed25519 -N ""
# — ou, alternative RSA récente (4096 bits) si ed25519 n'est pas disponible —# — or, recent RSA alternative (4096 bits) if ed25519 is not available —# — o, alternativa RSA reciente (4096 bits) si ed25519 no está disponible —
ssh-keygen -t rsa -b 4096 -C "${LCL_USER}@$HOSTNAME" -f ~/.ssh/id_rsa -N ""
🪟 Windows (PowerShell)
ssh-keygen -t ed25519 -C "$LCL_USER@$env:COMPUTERNAME" -f "$env:USERPROFILE\.ssh\id_ed25519" -N '""'
# — ou, alternative RSA récente (4096 bits) si ed25519 n'est pas disponible —# — or, recent RSA alternative (4096 bits) if ed25519 is not available —# — o, alternativa RSA reciente (4096 bits) si ed25519 no está disponible —
ssh-keygen -t rsa -b 4096 -C "$LCL_USER@$env:COMPUTERNAME" -f "$env:USERPROFILE\.ssh\id_rsa" -N '""'
RSA reste utile en environnement contraint (très vieux serveur AIX, politique interne imposant RSA) — dans ce cas, utiliser 4096 bits systématiquement (2048 bits est désormais considéré comme un plancher, pas une cible). Toutes les commandes des étapes suivantes s'appliquent à l'identique en remplaçant id_ed25519 par id_rsa. RSA remains useful in constrained environments (very old AIX server, internal policy mandating RSA) — in that case, always use 4096 bits (2048 bits is now considered a floor, not a target). All commands in the following steps apply identically by replacing id_ed25519 with id_rsa. RSA sigue siendo útil en entornos restringidos (servidor AIX muy antiguo, política interna que exige RSA) — en ese caso, usar siempre 4096 bits (2048 bits ahora se considera un mínimo, no un objetivo). Todos los comandos de los pasos siguientes se aplican igual sustituyendo id_ed25519 por id_rsa.
Sur Windows, le client OpenSSH est intégré depuis Windows 10 1809 (Paramètres → Applications facultatives → OpenSSH Client s'il est absent). Chemin par défaut : %USERPROFILE%\.ssh\. On Windows, the OpenSSH client is built in since Windows 10 1809 (Settings → Optional features → OpenSSH Client if missing). Default path: %USERPROFILE%\.ssh\. En Windows, el cliente OpenSSH está integrado desde Windows 10 1809 (Configuración → Características opcionales → OpenSSH Client si falta). Ruta por defecto: %USERPROFILE%\.ssh\.

3. Copie de la clé publique vers le serveur distant 3. Copying the public key to the remote server 3. Copia de la clave pública al servidor remoto

4 combinaisons possibles selon l'OS du poste local et du serveur distant — la commande diffère surtout parce que ssh-copy-id n'existe pas nativement sous Windows, et parce qu'un serveur Windows range les clés différemment selon que le compte distant est administrateur ou non. 4 possible combinations depending on the local and remote OS — the command mainly differs because ssh-copy-id doesn't exist natively on Windows, and because a Windows server stores keys differently depending on whether the remote account is an administrator. 4 combinaciones posibles según el SO local y el remoto — el comando difiere principalmente porque ssh-copy-id no existe de forma nativa en Windows, y porque un servidor Windows almacena las claves de forma distinta según si la cuenta remota es administradora.
🐧 → 🐧 Unix/AIX → Unix/AIXUnix/AIX → Unix/AIXUnix/AIX → Unix/AIX
ssh-copy-id -i ~/.ssh/id_ed25519.pub ${RMT_USER}@${RMT_SERVER}
# — ou, avec une clé RSA —# — or, with an RSA key —# — o, con una clave RSA —
ssh-copy-id -i ~/.ssh/id_rsa.pub ${RMT_USER}@${RMT_SERVER}
🐧 → 🪟 Unix/AIX → WindowsUnix/AIX → WindowsUnix/AIX → Windows
# Compte distant standard (non-administrateur)# Standard remote account (non-administrator)# Cuenta remota estándar (no administradora)
ssh-copy-id -i ~/.ssh/id_ed25519.pub ${RMT_USER}@${RMT_SERVER}
# — ou, avec une clé RSA —# — or, with an RSA key —# — o, con una clave RSA —
ssh-copy-id -i ~/.ssh/id_rsa.pub ${RMT_USER}@${RMT_SERVER}
🪟 → 🐧 Windows → Unix/AIXWindows → Unix/AIXWindows → Unix/AIX
# pas de ssh-copy-id sous Windows# no ssh-copy-id on Windows# sin ssh-copy-id en Windows
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh ${RMT_USER}@${RMT_SERVER} "cat >> ~/.ssh/authorized_keys"
# — ou, avec une clé RSA —# — or, with an RSA key —# — o, con una clave RSA —
Get-Content "$env:USERPROFILE\.ssh\id_rsa.pub" | ssh ${RMT_USER}@${RMT_SERVER} "cat >> ~/.ssh/authorized_keys"
🪟 → 🪟 Windows → WindowsWindows → WindowsWindows → Windows
# Compte distant standard (non-administrateur)# Standard remote account (non-administrator)# Cuenta remota estándar (no administradora)
Get-Content "$env:USERPROFILE\.ssh\id_ed25519.pub" | ssh ${RMT_USER}@${RMT_SERVER} "cat >> .ssh/authorized_keys"
# — ou, avec une clé RSA —# — or, with an RSA key —# — o, con una clave RSA —
Get-Content "$env:USERPROFILE\.ssh\id_rsa.pub" | ssh ${RMT_USER}@${RMT_SERVER} "cat >> .ssh/authorized_keys"
⚠️ Cas particulier — serveur Windows avec un compte distant administrateur : OpenSSH Server ignore alors authorized_keys dans le profil utilisateur et exige à la place %ProgramData%\ssh\administrators_authorized_keys, avec des permissions ACL restreintes (lecture réservée à SYSTEM et Administrators) : ⚠️ Special case — Windows server with an administrator remote account: OpenSSH Server then ignores authorized_keys in the user profile and instead requires %ProgramData%\ssh\administrators_authorized_keys, with restricted ACL permissions (read access limited to SYSTEM and Administrators): ⚠️ Caso particular — servidor Windows con una cuenta remota administradora: OpenSSH Server ignora entonces authorized_keys en el perfil de usuario y exige en su lugar %ProgramData%\ssh\administrators_authorized_keys, con permisos ACL restringidos (lectura limitada a SYSTEM y Administrators):
ssh ${RMT_USER}@${RMT_SERVER} "powershell -Command \"Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '<contenu de id_ed25519.pub ou id_rsa.pub><content of id_ed25519.pub or id_rsa.pub><contenido de id_ed25519.pub o id_rsa.pub>'\""
ssh ${RMT_USER}@${RMT_SERVER} "icacls.exe %ProgramData%\ssh\administrators_authorized_keys /inheritance:r /grant Administrators:F /grant SYSTEM:F"

4. Vérification du système distant 4. Remote system check 4. Verificación del sistema remoto

La commande d'identification du système diffère selon l'OS distant — utile pour confirmer la cible avant d'automatiser l'appel à --remote. The system-identification command differs by remote OS — useful to confirm the target before automating the --remote call. El comando de identificación del sistema difiere según el SO remoto — útil para confirmar el destino antes de automatizar la llamada a --remote.
# AIX# AIX# AIX
ssh ${LCL_USER}@${RMT_SERVER} 'oslevel;echo -e \n;hostname'
# Linux# Linux# Linux
ssh ${LCL_USER}@${RMT_SERVER} 'cat /etc/system-release;hostname'
# Windows# Windows# Windows
ssh ${LCL_USER}@${RMT_SERVER} "systeminfo | findstr /B /C:\"OS Name\" /C:\"OS Version\"; hostname"

5. Test final de la connexion 5. Final connection test 5. Prueba final de conexión

🐧 Linux / AIX (bash)
ssh -i ~/.ssh/id_ed25519 "${LCL_USER}@${RMT_SERVER}"
# — ou, avec une clé RSA —# — or, with an RSA key —# — o, con una clave RSA —
ssh -i ~/.ssh/id_rsa "${LCL_USER}@${RMT_SERVER}"
🪟 Windows (PowerShell)
ssh -i "$env:USERPROFILE\.ssh\id_ed25519" "$LCL_USER@$RMT_SERVER"
# — ou, avec une clé RSA —# — or, with an RSA key —# — o, con una clave RSA —
ssh -i "$env:USERPROFILE\.ssh\id_rsa" "$LCL_USER@$RMT_SERVER"
Si cette commande se connecte sans demander de mot de passe, l'échange de clés est opérationnel. Selon la clé générée à l'étape 2 : chkcert --remote --remote-user ${RMT_USER} --remote-key ~/.ssh/id_ed25519 ou ~/.ssh/id_rsa (Unix/AIX), --remote-key %USERPROFILE%\.ssh\id_ed25519 ou %USERPROFILE%\.ssh\id_rsa (Windows) — pourra s'exécuter sans intervention manuelle, quel que soit l'OS du serveur distant. If this command connects without a password prompt, the key exchange is working. Depending on the key generated in step 2: chkcert --remote --remote-user ${RMT_USER} --remote-key ~/.ssh/id_ed25519 or ~/.ssh/id_rsa (Unix/AIX), --remote-key %USERPROFILE%\.ssh\id_ed25519 or %USERPROFILE%\.ssh\id_rsa (Windows) — can run unattended, regardless of the remote server's OS. Si este comando se conecta sin pedir contraseña, el intercambio de claves funciona. Según la clave generada en el paso 2: chkcert --remote --remote-user ${RMT_USER} --remote-key ~/.ssh/id_ed25519 o ~/.ssh/id_rsa (Unix/AIX), --remote-key %USERPROFILE%\.ssh\id_ed25519 o %USERPROFILE%\.ssh\id_rsa (Windows) — podrá ejecutarse sin intervención manual, sea cual sea el SO del servidor remoto.

6. Points de vigilance côté serveur distant 6. Things to check on the remote server 6. Puntos de atención en el servidor remoto

  • Permissions strictes attendues par sshd (serveur Unix/AIX) : dossier personnel non accessible en écriture par le groupe/autres, ~/.ssh en 700, ~/.ssh/authorized_keys en 600. Strict permissions expected by sshd (Unix/AIX server): home directory not group/world-writable, ~/.ssh at 700, ~/.ssh/authorized_keys at 600. Permisos estrictos esperados por sshd (servidor Unix/AIX): directorio personal sin escritura para grupo/otros, ~/.ssh en 700, ~/.ssh/authorized_keys en 600.
  • Sur AIX, vérifier que PubkeyAuthentication yes est actif dans /etc/ssh/sshd_config. On AIX, verify PubkeyAuthentication yes is enabled in /etc/ssh/sshd_config. En AIX, verificar que PubkeyAuthentication yes esté activo en /etc/ssh/sshd_config.
  • Sur serveur Windows (OpenSSH Server), vérifier que le service sshd est démarré et que le rôle optionnel OpenSSH Server est bien installé — non présent par défaut sur Windows 10/11, à activer via Paramètres → Applications facultatives ou Add-WindowsCapability. On a Windows server (OpenSSH Server), verify the sshd service is running and the optional OpenSSH Server feature is installed — not present by default on Windows 10/11, enable via Settings → Optional features or Add-WindowsCapability. En un servidor Windows (OpenSSH Server), verificar que el servicio sshd esté en ejecución y que la característica opcional OpenSSH Server esté instalada — no está presente por defecto en Windows 10/11, se activa vía Configuración → Características opcionales o Add-WindowsCapability.
  • Si RMT_USERLCL_USER, s'assurer que ce compte de service dispose des droits de lecture nécessaires sur les fichiers de certificats à analyser. If RMT_USERLCL_USER, make sure that service account has read access to the certificate files being analyzed. Si RMT_USERLCL_USER, asegurarse de que esa cuenta de servicio tenga permisos de lectura sobre los ficheros de certificados a analizar.
Jamais nécessaire Never required Nunca necesario
  • runmqakm ET keytool simultanément — le script détecte dynamiquement l'outil disponible et n'échoue que si aucun n'est trouvé pour le type de fichier traité. runmqakm AND keytool at the same time — the script dynamically detects whichever is available and only fails if none matches the file type being processed. runmqakm Y keytool simultáneamente — el script detecta dinámicamente la herramienta disponible y solo falla si ninguna coincide con el tipo de fichero tratado.
  • Droits administrateur/root pour l'exécution normale (uniquement pour l'installation des outils, ou mklink sous Windows lors de la compilation). Administrator/root rights for normal execution (only needed to install the tools themselves, or for mklink on Windows during compilation). Derechos de administrador/root para la ejecución normal (solo necesarios para instalar las herramientas, o para mklink en Windows durante la compilación).
  • Connexion Internet à l'exécution — uniquement pour l'installation initiale des dépendances Python ou la compilation Nuitka en mode standalone. Internet access at runtime — only needed for the initial Python dependency install or standalone Nuitka compilation. Conexión a Internet en tiempo de ejecución — solo necesaria para la instalación inicial de las dependencias Python o la compilación Nuitka en modo standalone.