Ich kann kein clientseitiges Zertifikat generieren, nachdem ich meine eigene Zertifizierungsstelle geworden bin

Ich kann kein clientseitiges Zertifikat generieren, nachdem ich meine eigene Zertifizierungsstelle geworden bin

ICHwurde meine eigene Zertifizierungsstellenachdem Sie das Lernprogramm unter folgender Adresse durchgearbeitet haben:https://jamielinux.com/docs/openssl-certificate-authority/

Ich habe ein Root-Paar erstellt, ein Zwischenpaar erstellt und ein Server-Zertifikat signiert, das ich wie folgt auf Squid installiert habe:

http_port 3129 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/certs/gatesentry.csr.cert.pem key=/etc/squid3/key/gatesentry.key.pem

Insquid3.conf

Squid startet damit problemlos. Ich bin mir immer noch nicht sicher, ob es wirklich funktioniert oder nicht.

Beim Versuch, ein clientseitiges Zertifikat zur Installation in einem Browser zu generieren, der über den Proxy auf das Internet zugreift, wird folgende Fehlermeldung angezeigt:

Ich generiere es auf der Grundlage derAbschnitt „Server- und Client-Zertifikate signieren“ mit der Aufschrift „Zertifikat erstellen“

Darin steht, dass ich die Erweiterung „usr_crt“ verwenden muss, wenn ich ein Client-Zertifikat zur Authentifizierung erstellen möchte. Daher führe ich Folgendes aus:

cd /root/ca
openssl ca -config intermediate/openssl.conf \
      -extensions usr_cert -days 375 -notext -md sha256 \
      -in intermediate/csr/gatesentry.csr.pem \
      -out intermediate/certs/client.cert.pem
Using configuration from intermediate/openssl.conf
Enter pass phrase for /root/ca/intermediate/private/intermediate.key.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 4097 (0x1001)
        Validity
            Not Before: Jun 22 10:36:44 2016 GMT
            Not After : Jul  2 10:36:44 2017 GMT
        Subject:
            countryName               = US
            stateOrProvinceName       = Pennsylvania
            localityName              = locality
            organizationName          = Parents
            organizationalUnitName    = Security
            commonName                = gatesentry.domain.lan
            emailAddress              = [email protected]
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Cert Type: 
                SSL Client, S/MIME
            Netscape Comment: 
                OpenSSL Generated Client Certificate
            X509v3 Subject Key Identifier: 
                XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX
            X509v3 Authority Key Identifier: 
                keyid:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX

            X509v3 Key Usage: critical
                Digital Signature, Non Repudiation, Key Encipherment
            X509v3 Extended Key Usage: 
                TLS Web Client Authentication, E-mail Protection
Certificate is to be certified until Jul  2 10:36:44 2017 GMT (375 days)
Sign the certificate? [y/n]: y
failed to update database
TXT_DB error number 2

Ich verstehe nicht, warum ich die TXT_DB-Fehlermeldung Nummer 2 erhalte, wenn ich den Befehl als Root ausführe (natürlich auf einem anderen Computer).

Laut Tutorial sollte ich während dieses Vorgangs den allgemeinen Namen ändern können.

Antwort1

TXT_DB error number 2bedeutet DB_ERROR_INDEX_CLASH.

Sie haben zweimal versucht, ein Zertifikat mit demselben Index in die OpenSSL CA-Datenbank einzureichen.

Die Ursache hierfür ist normalerweise das Senden eines Zertifikats an die Datenbank, das dieselbe Seriennummer oder denselben allgemeinen Namen enthält. Überprüfen Sie für Letzteres die unique_subjectOption in der intermediate/openssl.confDatei, über die Sie in lesen können man ca.

Der allgemeine Name für ein Client-Zertifikat kann alles sein, zum Beispiel Ihr Name.

Der allgemeine Name wird in der intermediate/openssl.confDatei angegeben. Er kann so konfiguriert werden, dass er entweder nach Werten fragt oder Werte aus der Konfigurationsdatei liest. Dies wird durch die promptOption gesteuert, über die Sie in lesen können man req.

Antwort2

Laut Tutorial sollte ich während dieses Vorgangs den allgemeinen Namen ändern können

openssl genrsaIn diesem Tutorial erfahren Sie, wie Sie einen neuen Schlüssel mit UND eine neue CSR mit generieren openssl req -newUND das Zertifikat aus der CSR mit erstellen openssl ca. (Obwohl es wie zu viele Leute fälschlicherweise sagt, dass ein Zertifikat durch „Signieren der CSR“ erstellt wird. Die CA signiert die CSR nicht. Die CA signiert das Zertifikat, das erstellt wirdteilweise basierend aufdie CSR, unterscheidet sich aber von der CSR. /rant)

Wenn Sie eine neue CSR generierenSie geben den Betreffnamen an, einschließlich, aber nicht beschränkt auf den allgemeinen Namen, der sich, wie angegeben, von den darüber liegenden CA-Zertifikaten unterscheiden muss, undsollenunterscheiden sich von anderen EE-Zertifikaten, um Verwirrung zu vermeiden.

openssl cakann tatsächlich den Betreffnamen für ein ausgestelltes Zertifikat überschreiben (den vollständigen Namen, nicht den einzelnen allgemeinen Namen). Dies führt jedoch zu Zertifikaten mit unterschiedlichen Namen für denselben Schlüssel, was bestenfalls unnötig verwirrend und normalerweise weniger sicher ist (obwohl dieser Teil für Sie egal ist, andere jedoch schon, sodass es nicht gerade einfach ist).

Fehler beim Laden der Erweiterung im Abschnitt usr-crt
… kein Wert … Name=email_in_dn.
Könnte dies aus einer Upstream-Standarddatei stammen …

Nicht direkt. openssl ca -config xxxverwendet xxx und nur xxx als Konfigurationsdatei. Wenn Ihre Datei von Upstream abgeleitet ist, lautet der gewünschte Abschnittsname usr_certwie Sie anscheinend festgestellt haben, aber Sie müssen usr_cert nicht angeben, da dies die Standardeinstellung ist. Die Fehlermeldung zu email_in_dn bleibt einfach im Fehlerstapel übrig und der einzige echte Fehler war usr-crt; sobald Sie das behoben haben, -noemailDNist es nicht mehr erforderlich, obwohl Sie es möglicherweise trotzdem möchten.

Hat das etwas mit „subjectNameAlt“ zu tun?

Angenommen, Sie meinen unique_subject, nein. subjectAltName(nicht subjectNameAlt) aka SAN ist eine allgemeine Erweiterung, die alternative Namen für das Subjekt angibt, sich aber unique_subjectnur auf das Basisfeld Subjectund nicht auf ein SAN bezieht.

Clientseitiges Zertifikat zur Installation in einem Browser, der über den Proxy auf das Internet zugreift

Um es klar zu sagen: Ein Client-Zertifikat wie dieses ist nur nützlich, um sich selbst zu authentifizierenzum Proxy. Sie können kein Zertifikat im Client/Browser verwenden, um sich über IRGENDEINEN HTTPS-MitM gegenüber etwas im Internet zu authentifizieren, und Sie können kein selbst ausgestelltes Client-Zertifikat verwenden, um sich gegenüber den Systemen anderer Personen im Internet zu authentifizieren.

verwandte Informationen