Skip to content

SSH Cross-Tests

Ce document présente le plan des tests de validation croisée SSH. Ces tests valident que les certificats SSH générés par QPKI sont compatibles avec les outils OpenSSH natifs (ssh-keygen, sshd).

Note : BouncyCastle ne supporte pas le format de certificat OpenSSH. Les cross-tests SSH utilisent exclusivement les outils OpenSSH.

MétriqueValeur
ValidateurOpenSSH (ssh-keygen, sshd)
Tests13 cas de test
Artefacts testésUser cert, Host cert, KRL
AlgorithmesEd25519, ECDSA-P256, RSA-4096
Emplacementtest/crossval/ssh/
Terminal window
# Tous les tests SSH
make crosstest-ssh
# Générer les fixtures SSH
make crosstest-ssh-fixtures

ArtefactTC-ID PrefixAlgorithmes testésOutil de validation
User CertificateTC-XSSH-UCERTEd25519, ECDSA-P256, RSA-4096ssh-keygen -L
Host CertificateTC-XSSH-HCERTEd25519, ECDSA-P256, RSA-4096ssh-keygen -L
User Auth E2ETC-XSSH-AUTHEd25519sshd + ssh
PrincipalsTC-XSSH-PRINCEd25519ssh-keygen -L, sshd
ValidityTC-XSSH-VALIDEd25519ssh-keygen -L, sshd
ExtensionsTC-XSSH-EXTEd25519ssh-keygen -L
KRLTC-XSSH-KRLEd25519ssh-keygen -Q

1. Scripts de validation (test/crossval/ssh/)

Section titled “1. Scripts de validation (test/crossval/ssh/)”
test/crossval/ssh/
├── run_all.sh # Orchestrateur
├── lib/
│ ├── verify_user_cert.sh # TC-XSSH-UCERT-*
│ ├── verify_host_cert.sh # TC-XSSH-HCERT-*
│ ├── verify_auth.sh # TC-XSSH-AUTH-*
│ ├── verify_principals.sh # TC-XSSH-PRINC-*
│ ├── verify_validity.sh # TC-XSSH-VALID-*
│ ├── verify_extensions.sh # TC-XSSH-EXT-*
│ └── verify_krl.sh # TC-XSSH-KRL-*
└── results/
├── results-ssh.json # Résultats JSON
└── ctrf-crosstest-ssh.json # Export CTRF pour CI
ScriptTC-IDsDescriptionCommande
verify_user_cert.shTC-XSSH-UCERT-*Vérifie structure certificat userssh-keygen -L
verify_host_cert.shTC-XSSH-HCERT-*Vérifie structure certificat hostssh-keygen -L
verify_auth.shTC-XSSH-AUTH-*Authentification E2E avec sshdsshd + ssh
verify_principals.shTC-XSSH-PRINC-*Validation des principalsssh-keygen -L, sshd
verify_validity.shTC-XSSH-VALID-*Fenêtre de validité, rejet expiréssh-keygen -L, sshd
verify_extensions.shTC-XSSH-EXT-*Critical options, permissionsssh-keygen -L
verify_krl.shTC-XSSH-KRL-*Révocation via KRLssh-keygen -Q

TC-IDNomAlgorithmeRésultat attendu
TC-XSSH-UCERT-ED25519User cert Ed25519Ed25519ssh-keygen -L OK, type user certificate
TC-XSSH-UCERT-ECDSAUser cert ECDSAECDSA-P256ssh-keygen -L OK, type user certificate
TC-XSSH-UCERT-RSAUser cert RSARSA-4096ssh-keygen -L OK, type user certificate
TC-IDNomAlgorithmeRésultat attendu
TC-XSSH-HCERT-ED25519Host cert Ed25519Ed25519ssh-keygen -L OK, type host certificate
TC-XSSH-HCERT-ECDSAHost cert ECDSAECDSA-P256ssh-keygen -L OK, type host certificate
TC-XSSH-HCERT-RSAHost cert RSARSA-4096ssh-keygen -L OK, type host certificate
TC-IDNomDescriptionRésultat attendu
TC-XSSH-AUTH-ED25519Auth E2E Ed25519sshd accepte le certificat userConnexion SSH réussie
TC-IDNomDescriptionRésultat attendu
TC-XSSH-PRINC-OKPrincipals matchPrincipal listé dans le certAuthentification acceptée
TC-XSSH-PRINC-DENYPrincipals rejectPrincipal non listéAuthentification refusée
TC-IDNomDescriptionRésultat attendu
TC-XSSH-VALIDFenêtre de validitéDates Valid After/Before correctesssh-keygen -L affiche les dates
TC-XSSH-EXPIREDCert expiré rejetéCertificat avec validité passéesshd refuse le certificat
TC-IDNomDescriptionRésultat attendu
TC-XSSH-EXT-FCForce-commandCritical option force-commandssh-keygen -L affiche la restriction
TC-XSSH-EXT-SASource-addressCritical option source-addressssh-keygen -L affiche la restriction IP
TC-XSSH-EXT-PTYPermit-ptyExtension permit-ptyssh-keygen -L affiche la permission
TC-IDNomDescriptionRésultat attendu
TC-XSSH-KRL-CHKCert révoqué détectéCertificat révoqué dans KRLssh-keygen -Q indique révoqué
TC-XSSH-KRL-PASSCert non révoqué passeCertificat absent de la KRLssh-keygen -Q indique OK
TC-XSSH-KRL-SERRévocation par serialCert révoqué par numéro de sériessh-keygen -Q indique révoqué

Les fixtures sont des artefacts SSH générés par QPKI utilisés comme entrée des tests.

Terminal window
# Génère toutes les fixtures SSH
./test/crossval/generate_qpki_ssh_fixtures.sh
# Ou via Makefile
make crosstest-ssh-fixtures
test/crossval/fixtures/ssh/
├── user-ca/ # CA user par algorithme
│ ├── ed25519/
│ │ ├── ssh-ca.pub
│ │ └── ssh-ca.key
│ ├── ecdsa-p256/
│ └── rsa-4096/
├── host-ca/ # CA host par algorithme
│ ├── ed25519/
│ ├── ecdsa-p256/
│ └── rsa-4096/
├── user-certs/ # Certificats user émis
│ ├── ed25519-cert.pub
│ ├── ecdsa-p256-cert.pub
│ └── rsa-4096-cert.pub
├── host-certs/ # Certificats host émis
│ ├── ed25519-cert.pub
│ ├── ecdsa-p256-cert.pub
│ └── rsa-4096-cert.pub
└── krl/ # KRL générées
└── revoked.krl

JobTestsDurée estiméePrérequis
crosstest-sshTC-XSSH-*~5 minOpenSSH (préinstallé)
crosstest-ssh:
name: "[Interop] OpenSSH Certificates"
runs-on: ubuntu-latest
timeout-minutes: 15
needs: [build]
steps:
- uses: actions/checkout@v6
- name: Download binary
uses: actions/download-artifact@v8
with:
name: qpki-ci-binary
path: ./
- name: Make executable
run: chmod +x ./qpki
- name: "[SSH] Verify OpenSSH Version"
run: ssh -V
- name: "[SSH] Generate SSH Fixtures"
run: |
chmod +x test/crossval/generate_qpki_ssh_fixtures.sh
./test/crossval/generate_qpki_ssh_fixtures.sh
- name: "[SSH] Run SSH Cross-Tests"
run: |
cd test/crossval/ssh
chmod +x run_all.sh
./run_all.sh
- name: "[SSH] Upload Results"
if: always()
uses: actions/upload-artifact@v7
with:
name: ctrf-crosstest-ssh
path: |
test/crossval/ssh/results/ctrf-crosstest-ssh.json
test/crossval/ssh/results/results-ssh.json
retention-days: 30

Terminal window
# Vérifier le format du fichier
file cert.pub
# Doit être "OpenSSH ... certificate"
# Tenter la lecture
ssh-keygen -L -f cert.pub
Terminal window
# Mode debug sshd
/usr/sbin/sshd -d -p 2222
# Connexion verbose
ssh -vvv -p 2222 -o CertificateFile=cert.pub user@localhost
Terminal window
# Vérifier le format KRL
ssh-keygen -Q -f revoked.krl cert.pub
# Si erreur "not a KRL" : le fichier n'est pas au format binaire OpenSSH KRL