Suppression du certificate OpenVPN et connection sans file de certificate sur le server

J'ai rencontré un problème, j'ai supprimé les files de certificate du server.

Mais le client qui possède ces files peut encore se connecter.

J'ai découvert que je devrais révoquer le certificate et que cela peut se faire en changeant la ligne avec ce certificate dans

/etc/openvpn/easy-rsa/keys/index.txt

avoir R, pas V, comme première ligne de caractère.

Mais auparavant, j'ai supprimé la ligne pour ce certificate à partir du file, car essayer de générer ce certificate à nouveau vient de donner un file de 0 octets.

Comme j'ai lu, il ne devrait pas pouvoir se connecter après avoir supprimé index.txt , mais il se connecte.

Qu'est-ce qui peut causer le problème et comment puis-je interdire ce certificate particulier de se connecter?

Je souhaite être en mesure de créer un certificate avec le même nom, le CN et d'autres versions que j'ai définis pour chaque certificate, car celui qui est refusé – le certificate nouvellement créé doit pouvoir se connecter.

MODIFIER:

La solution a annulé les changements dans index.txt (en changeant de nouveau vers V dans cert je voulais révoquer) et en générant CRL dans easy-rsa , qui manquait.
L'index.txt ne doit pas être changé manuellement de la façon dont je l'ai fait, car il manquait de date de révocation et ne m'a pas permis de générer des CRL manquantes. J'ai découvert que cette révocation devrait être effectuée par /etc/openvpn/easy-rsa/revoke-full <cert name> , avec tous les vars comme lorsque cert a été généré, dans mon cas.

La réponse simple est que cela ne fonctionne pas parce que vous avez tout mal .

Votre idée fausse de base semble reposer sur l'idée que OpenVPN et l'autorité de certificateion disposent d'un canal de communication afin que OpenVPN suivez automatiquement les certificates que vous souhaitez autoriser. Ce n'est pas le cas . OpenVPN et l'autorité de certificateion sont des entités complètement distinctes (même si elles résident chacune sur le même hôte) et n'ont aucune communication entre elles.

L'AC "signale" les requests de certificateion (essentiellement des keys publiques regroupées avec des informations d'identification comme le nom d'hôte) en cryptant un hachage de la request de certificateion avec sa propre key privée. Ce qu'est OpenVPN est de vérifier si a) il peut déchiffrer le hash en utilisant la key publique de l'autorité de certificateion (dont il réside habituellement dans un file ca.crt quelque part) et vérifier si le hash est correct pour le certificate donné. Il n'exige ni aucune connection "en direct" à l'autorité de certificateion pour tout cela.

Vous ne pouvez pas révoquer un certificate en le supprimant du directory de l'autorité de certificateion (notez que si vous avez supprimé le certificate client et que c'était votre seule copy, openssl ca ne vous autoriserait plus à le révoquer) ou à modifier l'index.txt (ce file est juste une indication pour openssl ca concernant l'état des certificates disponibles). Ce que vous devez faire est plutôt

  1. exécutez openssl ca -revoke <certificatee file> pour révoquer le certificate dans la database interne OpenSSL CA (en ajoutant essentiellement les informations de révocation dans index.txt )
  2. créer une list de révocation de certificate en utilisant openssl ca -gencrl -out ca.crl
  3. copyz cette list de révocation dans le file de list de révocation OpenVPN (voir la directive crl-verify dans le file de configuration OpenVPN)
  4. voir OpenVPN refuser la connection au prochain contrôle de certificate

Si vous utilisez le script wrapper shell shell easy-rsa pour OpenSSL CA , consultez la section OpenVPN sur la révocation de certificates pour get une documentation plus détaillée sur la façon de réaliser ce qui précède en utilisant les scripts easy-rsa. La procédure de base est

 # cd into the easy-rsa directory cd <somewhere>/easy-rsa # load your CA-related variables into the shell environment from the ./vars file . ./vars # run the revoke script for <clientcert.pem> ./revoke-full clientcert 

vous findez le crl.pem dans le $KEY_DIR tel que défini dans votre file ./vars .