Certificats CA de confiance
Embarque des CA racines privées dans le JDK livré pour que HTTPS marche sur les réseaux verrouillés.
Les proxys d'entreprise, les passerelles ZTNA et les services de filtrage FAI font souvent du man-in-the-middle TLS avec une CA racine privée. Le trust store JDK par défaut ne la connaît pas, donc chaque appel HTTPS de le app jette SSLHandshakeException. Plutôt que demander à l'utilisateur de patcher son JVM, déclare les certificats une fois — Nucleus les importe dans le cacerts du JDK livré au moment du packaging.
TL;DR
- Dépose des certificats PEM ou DER dans
nativeDistributions.trustedCertificates. - Importés dans le runtime JLink livré, pas dans le JVM hôte.
- Idempotent — même contenu, même alias, pas de ré-import.
- Chaque format de packaging embarque automatiquement le runtime patché.
Installation
Livré avec le plugin Gradle.
Démarrage rapide
nucleus {
application {
nativeDistributions {
trustedCertificates.from(files(
"certs/company-proxy-ca.pem",
"certs/vpn-root.crt",
))
}
}
}Les formats PEM (-----BEGIN CERTIFICATE-----) et DER (binaire) sont acceptés.
Comment ça marche
Après createRuntimeImage, Nucleus copie le runtime JLink dans runtime-patched/ et lance keytool -import -trustcacerts pour chaque certificat. Le runtime patché nourrit à la fois createDistributable et createSandboxedDistributable, donc chaque format — DMG, NSIS, DEB, PKG, AppX, … — embarque la même racine de confiance.
Les alias sont dérivés du nom de fichier plus une courte empreinte SHA-256 du contenu. corp-root-ca.crt devient corp-root-ca-3a1f8b2c. Même contenu = même alias = idempotent. L'image runtime JLink originale n'est jamais modifiée — seule la copie sous build/compose/tmp/<appName>/runtime-patched/.
createRuntimeImage
↓
patchCaCertificates ← copie le runtime, lance keytool par cert
↓
createDistributable
createSandboxedDistributable
↓
packageDmg / packageDeb / packageNsis / …La tâche patchCaCertificates n'est enregistrée que quand trustedCertificates est non vide. Elle tourne automatiquement — on ne l'invoques pas.
Référence
nativeDistributions.trustedCertificates: ConfigurableFileCollection- Tâche :
patchCaCertificates
Le binaire keytool utilisé est celui du JDK configuré via javaHome (ou le JVM du daemon Gradle si non défini).
Notes
- Patche uniquement le JVM livré. Le JDK de la machine hôte n'est pas touché.
- Pour la confiance OS au runtime (Keychain sur macOS, CryptoAPI sur Windows, NSS/PEM système sur Linux), utilise le module
native-ssl— il lit les CA installées par l'utilisateur sans patch au build. - Les deux approches sont complémentaires.
trustedCertificatespour les CA connues au build (livrées à tous les utilisateurs).native-sslpour celles que les utilisateurs finaux ajoutent eux-mêmes.