Konfigurationsinformationen können unter Windows unter /usr/local/ssl/openssl.cnf nicht geladen werden

183

Bei Verwendung von OpenSSL unter Windows:

openssl genrsa -out privatekey.pem 1024 -->

Erfolgreich erstellt

openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 
---->

Fehlermeldung als anzeigen

Konfigurationsinformationen können nicht aus /usr/local/ssl/openssl.cnf geladen werden

karthik
quelle
3
Alle Antworten zeigen, dass man irgendwie auf die Konfigurationsdatei openssl.cnf verweisen muss. ABER niemand erwähnt welche Konfigurationsdatei, ?? Wer schafft es? Was ist ihr Inhalt?
Joedotnot

Antworten:

170

Nach der Installation von OpenSSL musste ich eine neue Umgebungsvariable erstellen:

  • Name: OPENSSL_CONF
  • Wert: C:\Program Files\OpenSSL\openssl.cnf

In Powershell:

$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL\openssl.cnf"

Dieser Wert unterscheidet sich von früheren Installationsversionen (wie in einer früheren Bearbeitung dieses Beitrags gezeigt). Vergessen Sie auch nicht, den Binärordner openssl ${env:ProgramFiles}\OpenSSLzu Ihrem Pfad hinzuzufügen .

lame_coder
quelle
16
Auf Version 1.0.1j musste ich C:\OpenSSL-Win32\bin\openssl.cfgstattdessen verwenden.
Kevin Panko
7
Oder C: \ OpenSSL-Win64 \ bin \ openssl.cfg in 64-Bit-Systemen
Borjab
13
Oder C:\Program Files (x86)\Git\ssl\openssl.cfgfür diejenigen, die schon mit Git sind.
Kspearrin
wo / wie stellst du diesen Wert ein?
Matthew_360
Dies würde es in die Startumgebung Ihres Benutzers setzen:SETX OPENSSL_CONF c:/libs/openssl-0.9.8k/openssl.cnf
Ross Presser
78

Sie sollten den absoluten Pfad zur Konfiguration wie folgt angeben:

openssl req -x509 -config "C:\OpenSSL-Win64\bin\openssl.cnf" ...
zombi_man
quelle
36
-config C: \ OpenSSL-Win64 \ bin \ openssl.cnf
TimK
4
In Version heruntergeladen 1.0.1e von slproweb.com/products/Win32OpenSSL.html nur die Datei openssl.cfgin dem Verzeichnis ist nach der Installation. Aber mit dieser Datei scheint es trotzdem zu funktionieren.
Vanje
9
Wenn Sie die mit Git gelieferte OpenSSL verwenden, können Sie versuchen-config "C:\Program Files (x86)\Git\ssl\openssl.cnf"
Joel B
2
openssl: Fehler: '-config' ist ein ungültiger Befehl. Wie stellt ihr es ein?
Benez
1
@kewlbfy siehe @ Kosar Antwort unten, wo die -configFlagge verwendet werden soll, das hat bei mir
funktioniert
35

In Windows 10 müssen Sie weder neu starten noch im Administratormodus ausführen, sondern müssen die openssl-Konfiguration wie folgt festlegen:

set OPENSSL_CONF=C:\Program Files (x86)\GnuWin32\share\openssl.cnf

Natürlich, wenn Sie verwenden GnuWin32

Schwarze Perle
quelle
20

In Windows [ Ähnliches Szenario ]

Ich hatte das gleiche Problem, aber es war während der Anforderung einer Zertifikatsignierungsanforderung.

Ich habe das Folgende getan, es hat bei mir funktioniert.

Nach der Installation von OpenSSL wird die Eingabeaufforderung als Administrator nach dem Neustart des Systems ausgeführt.

tat, 1. [Fehlerfall]

C:\OpenSSL-Win64\bin>openssl req -new -key server.key -out server.csr

WARNUNG: Konfigurationsdatei kann nicht geöffnet werden: C: \ OpenSSL-Win64 \ bin \ openssl.cnf UND Konfigurationsinformationen können nicht aus C: \ OpenSSL-Win64 \ bin \ openssl.cnf geladen werden

2. [Arbeitete mit Warnung]

C:\OpenSSL-Win64\bin> openssl req -new -key server.key -out server.csr -config C:\OpenSSL-Win64\bin\openssl.cfg

[Warnmeldung]: WARNUNG: Konfigurationsdatei kann nicht geöffnet werden: C: \ OpenSSL-Win64 \ bin \ openssl.cnf

Aber mich dazu veranlasst für die Passphrase für server.key Es funktionierte für mich.

Ich verwies auf diesen Link für meine Hilfe.

Danke dir.

Mavis
quelle
Vielen Dank, der Link, den Sie bereitgestellt haben, hat mir sehr geholfen: akadia.com/services/ssh_test_certificate.html
Leole
15

Das einzige, was in dieser Situation für mich funktioniert hat, war die selbst erstellte Datei openssl.cnf .

Hier sind die Grundlagen für diese Übung (nach Bedarf bearbeiten):

#
# OpenSSL configuration file.
#

# Establish working directory.

dir                         = .

[ ca ]
default_ca                  = CA_default

[ CA_default ]
serial                      = $dir/serial
database                    = $dir/certindex.txt
new_certs_dir               = $dir/certs
certificate                 = $dir/cacert.pem
private_key                 = $dir/private/cakey.pem
default_days                = 365
default_md                  = md5
preserve                    = no
email_in_dn                 = no
nameopt                     = default_ca
certopt                     = default_ca
policy                      = policy_match

[ policy_match ]
countryName                 = match
stateOrProvinceName         = match
organizationName            = match
organizationalUnitName      = optional
commonName                  = supplied
emailAddress                = optional

[ req ]
default_bits                = 1024          # Size of keys
default_keyfile             = key.pem       # name of generated keys
default_md                  = md5               # message digest algorithm
string_mask                 = nombstr       # permitted characters
distinguished_name          = req_distinguished_name
req_extensions              = v3_req

[ req_distinguished_name ]
# Variable name             Prompt string
#-------------------------    ----------------------------------
0.organizationName          = Organization Name (company)
organizationalUnitName      = Organizational Unit Name (department, division)
emailAddress                = Email Address
emailAddress_max            = 40
localityName                = Locality Name (city, district)
stateOrProvinceName         = State or Province Name (full name)
countryName                 = Country Name (2 letter code)
countryName_min             = 2
countryName_max             = 2
commonName                  = Common Name (hostname, IP, or your name)
commonName_max              = 64

# Default values for the above, for consistency and less typing.
# Variable name             Value
#------------------------     ------------------------------
0.organizationName_default  = My Company
localityName_default        = My Town
stateOrProvinceName_default = State or Providence
countryName_default         = US

[ v3_ca ]
basicConstraints            = CA:TRUE
subjectKeyIdentifier        = hash
authorityKeyIdentifier      = keyid:always,issuer:always

[ v3_req ]
basicConstraints            = CA:FALSE
subjectKeyIdentifier        = hash

Ich hoffe das hilft.

simhumileco
quelle
1
Nachdem ich jede andere hier aufgeführte Lösung ausprobiert hatte, funktionierte diese für mich. Sobald die Konfiguration erstellt ist (im Verzeichnis openssl.exe), können Sie ausführenopenssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 -config openssl.cnf
Jimbo
12

Nach der Installation von OpenSSL müssen Sie Ihren Computer neu starten und verwenden Run As Administrator. Dann funktioniert es.

karthik
quelle
11

Mit den GnuWin32-Tools fand ich die openssl.cnf unter C: \ gnuwin32 \ share

set OPENSSL_CONF=C:\gnuwin32\share\openssl.cnf
TL
quelle
9

Unter Windows 8 habe ich einfach die Datei openssl.cnf gefunden und auf das Laufwerk C kopiert. dann:

openssl req -new -key server.key -out server.csr -config C:\openssl.cnf

Hat perfekt funktioniert.

Ali
quelle
6

In Windows 7 musste ich nicht neu starten, sondern einfach die Eingabeaufforderung im Administratormodus ausführen.

Calgary Libertarian
quelle
4

In meinem Fall muss ich den Pfad der Datei openssl.cnf manuell für den Befehl mit der configOption festlegen . Also der Befehl

openssl req -x509 -config "C:\Users\sk\Downloads\openssl-0.9.8k_X64\openssl.cnf" -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -days 900
Sunil Garg
quelle
3

Wenn Sie Win32 OpenSSL v1.1.0g verwenden , richten Sie diese Umgebungsvariable ein:

set OPENSSL_CONF=C:\OpenSSL-Win32\bin\cnf\openssl.cnf

Bevor Sie diesen Befehl mit "server.key" ausführen , erstellen Sie erfolgreich "server.csr" :

openssl req -new -key server.key -out server.csr
5ervant
quelle
1

Zur grundlegenden Frage, warum openssl nicht gefunden wird: Kurze Antwort: In einigen Installationspaketen für openssl ist standardmäßig die Datei openssl.cnf enthalten. Andere Pakete nicht. Im letzteren Fall fügen Sie einen über den unten gezeigten Link ein. Sie können bei Bedarf zusätzliche benutzerspezifische Details eingeben - DNS-Name usw.

Von https://www.openssl.org/docs/manmaster/man5/config.html zitiere ich direkt:

"OPENSSL LIBRARY CONFIGURATION

Anwendungen können bestimmte Aspekte von OpenSSL automatisch mithilfe der OpenSSL-Hauptkonfigurationsdatei oder optional einer alternativen Konfigurationsdatei konfigurieren. Das Dienstprogramm openssl enthält diese Funktionalität: Jeder Unterbefehl verwendet die OpenSSL-Hauptkonfigurationsdatei, es sei denn, im Unterbefehl wird eine Option zur Verwendung einer alternativen Konfigurationsdatei verwendet.

Um die Bibliothekskonfiguration zu aktivieren, muss der Standardabschnitt eine entsprechende Zeile enthalten, die auf den Hauptkonfigurationsabschnitt verweist. Der Standardname lautet openssl_conf, der vom Dienstprogramm openssl verwendet wird. Andere Anwendungen verwenden möglicherweise einen alternativen Namen wie myapplication_conf. Alle Bibliothekskonfigurationszeilen werden im Standardabschnitt am Anfang der Konfigurationsdatei angezeigt.

Der Konfigurationsabschnitt sollte aus einer Reihe von Name-Wert-Paaren bestehen, die spezifische Informationen zur Modulkonfiguration enthalten. Der Name steht für den Namen des Konfigurationsmoduls. Die Bedeutung des Werts ist modulspezifisch: Er kann beispielsweise einen weiteren Konfigurationsabschnitt darstellen, der spezifische Informationen zum Konfigurationsmodul enthält. Z.B:"

Es scheint also, dass man openssl.cnf zusammen mit Ihrem Distinguished Name (DN) zusammen mit anderen für Ihre Verwendung spezifischen Einträgen selbst konfigurieren muss.

Hier ist die Vorlagendatei, aus der Sie openssl.cnf mit Ihren spezifischen Einträgen generieren können.

Eine Anwendung verfügt tatsächlich über eine Demo-Installation, die eine Demo-CNF-Datei enthält.

Wenn Sie programmgesteuert auf .cnf-Dateien zugreifen müssen, können Sie außerdem die entsprechenden Header --openssl / conf.h-- einfügen und Ihre .cnf-Dateien mit analysieren

CONF_modules_load_file(const char *filename, const char *appname,
                            unsigned long flags);

Hier sind Dokumente für "CONF_modules_load_file";

loveofthecode
quelle
0

Für mich hat die Variable vor dem Aufruf den Trick gemacht:

OPENSSL_CONF=/usr/ssl/openssl.cnf openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365
VoloshinS
quelle
0

Unter Windows Powershell:

$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL-Win64\bin\openssl.cfg"
Schmied
quelle