diff --git a/packages/secubox-toolbox/sbin/secubox-toolbox-wg-provision b/packages/secubox-toolbox/sbin/secubox-toolbox-wg-provision index 82069a2f..c0f99530 100755 --- a/packages/secubox-toolbox/sbin/secubox-toolbox-wg-provision +++ b/packages/secubox-toolbox/sbin/secubox-toolbox-wg-provision @@ -96,7 +96,9 @@ if [ ! -f "$CA_WG_DIR/mitmproxy-ca.pem" ]; then log "generating dedicated WG CA (full DN, 10y)" cd "$CA_WG_DIR" - # OpenSSL config — full DN, CA extensions, SKI/AKI + # OpenSSL config — minimal DN, NO SAN (Android Settings parser chokes + # on SAN with spaces — shows "émis par null" in install dialog). + # Classic RFC 5280 X.509v3 root, sha256, pathlen 0. cat > _ca.cnf <<'CNF' [req] distinguished_name = dn @@ -105,23 +107,19 @@ x509_extensions = v3_ca [dn] C = FR -ST = Auvergne-Rhone-Alpes -L = Notre-Dame-du-Cruet O = CyberMind Gondwana -OU = ToolBoX R3 WireGuard CN = Gondwana ToolBoX R3 CA [v3_ca] -basicConstraints = critical, CA:TRUE +basicConstraints = critical, CA:TRUE, pathlen:0 keyUsage = critical, keyCertSign, cRLSign subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always -subjectAltName = DNS:Gondwana ToolBoX R3 CA, DNS:cabine.gondwana.local CNF openssl genrsa -out _key.pem 2048 2>/dev/null openssl req -new -x509 -days 3650 -key _key.pem -out _cert.pem \ - -config _ca.cnf 2>/dev/null + -config _ca.cnf -sha256 2>/dev/null # Combined key+cert for mitm (mitmproxy-ca.pem) cat _key.pem _cert.pem > mitmproxy-ca.pem diff --git a/packages/secubox-toolbox/secubox_toolbox/api.py b/packages/secubox-toolbox/secubox_toolbox/api.py index d2b1fa6a..fd4125b4 100644 --- a/packages/secubox-toolbox/secubox_toolbox/api.py +++ b/packages/secubox-toolbox/secubox_toolbox/api.py @@ -515,21 +515,30 @@ pre{background:#1a1a25;color:var(--phos-hot);padding:0.6rem 0.8rem;border-radius
gondwana-toolbox-r3-ca.crtca.pem dans Téléchargementsgondwana-toolbox-r3-ca.crt dans TéléchargementsParamètres → Sécurité → Identifiants
de confiance → onglet UTILISATEUR
@@ -864,7 +873,7 @@ async def wg_profile_new(request: Request) -> Response:
try:
store.upsert_client(wg_hash, profile["client_ip"], level="r3")
except Exception as e:
- logger.warning("wg peer upsert failed for %s: %s", wg_hash, e)
+ log.warning("wg peer upsert failed for %s: %s", wg_hash, e)
return Response(
content=profile["conf_text"],
@@ -910,6 +919,22 @@ async def wg_ca_pem() -> Response:
)
+@router.get("/wg/ca.der")
+@router.get("/wg/ca.crt")
+async def wg_ca_der() -> Response:
+ """DER (binary) version of the mitm-wg CA. Some Android installers
+ (especially Android 11+ Settings → CA certificate) prefer DER over PEM
+ and reject the .pem extension. Same cert, just binary-encoded."""
+ p = Path("/etc/secubox/toolbox/ca-wg/mitmproxy-ca-cert.cer")
+ if not p.exists():
+ raise HTTPException(404, "mitm-wg CA DER not yet generated")
+ return Response(
+ content=p.read_bytes(),
+ media_type="application/x-x509-ca-cert",
+ headers={"Content-Disposition": "attachment; filename=gondwana-toolbox-r3-ca.crt"},
+ )
+
+
@router.get("/wg/ca.mobileconfig")
async def wg_ca_mobileconfig() -> Response:
"""iOS profile that installs the mitm-wg CA in trust store."""