OpenSSL i błąd odczytu pliku openssl.conf

119

Używam Windows XP 32bit

Właśnie pobrałem Openssl z następującego adresu URL i zainstalowałem go. http://www.slproweb.com/products/Win32OpenSSL.html

a następnie próbowałem utworzyć certyfikat z podpisem własnym za pomocą następującego polecenia

openssl req -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

potem zaczął wyświetlać następujący błąd

Nie można załadować informacji konfiguracyjnych z /usr/local/ssl/openssl.cnf

Potem po googlowaniu kiedyś zmieniłem powyższe polecenie na

openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

Ale teraz pojawia się następujący błąd w wierszu polecenia

błąd w linii -1 C: \ OpenSSL \ bin \ openssl.conf
4220: błąd: 02001002: biblioteka systemowa: fopen: Nie ma takiego pliku lub katalogu:. \ crypto \ bio \ bss_file.c: 126: fopen ('C: \ OpenSSL \ bin \ openssl.conf ',' rb ') 4220: błąd: 2006D080: procedury BIO: BIO_new_file: brak takiego pliku:. \ Crypto \ bio \ bss_file.c: 129:
4220: błąd: 0E078072: procedury pliku konfiguracyjnego : DEF_LOAD: nie ma takiego pliku:. \ Crypto \ conf \ conf_def.c: 197:

Proszę pomóż. Z góry dziękuję.

Sreeram
źródło
3
sprawdź dokładną nazwę pliku: openssl.conf ---> openssl.cnf
Mark
2
rozszerzenie pliku w systemie Windows to teraz .cfg. Upewnij się również, że podana ścieżka do pliku (w wierszu poleceń lub w zmiennej środowiskowej OPENSSL_CONF) nie znajduje się w cudzysłowie.
tatx
Wydaje się, że rozszerzenie pliku (.cnf / .cfg) różni się w zależności od tego, co zostało użyte do zainstalowania OpenSSL. Na instalacji WampServer v3.2.2 po prostu nazwa pliku konfiguracyjnego to openssl.cnf. Zrobiłem również 64-bitową instalację Window10 przy użyciu plików binarnych z Shining Path Productions. Nazwa pliku w tej instalacji to openssl.cfg. Ta różnica w nazwach rozszerzeń plików konfiguracyjnych OpenSSL wydaje się być zależna od kompilacji. Nie testowałem jeszcze, która nazwa rozszerzenia jest rozpoznawana przez OpenSSL v1.1.1g.
Bill Vallance,

Odpowiedzi:

141

W systemie Windows można również ustawić właściwość environment OPENSSL_CONF. Na przykład z linii poleceń możesz wpisać:

set OPENSSL_CONF=c:/libs/openssl-0.9.8k/openssl.cnf

aby to potwierdzić, możesz wpisać:

echo %OPENSSL_CONF%

Możesz również ustawić ją jako część zmiennych środowiskowych komputera, aby wszyscy użytkownicy i usługi mieli ją domyślnie dostępną. Zobacz, na przykład, zmienne środowiskowe w systemie Windows NT i jak zarządzać zmiennymi środowiskowymi w systemie Windows XP .

Teraz możesz uruchamiać polecenia openssl bez konieczności przekazywania parametru lokalizacji konfiguracji.

dvtoever
źródło
9
Dzięki, pracował dla mnie! (ustaw OPENSSL_CONF = c: \ openssl-win32 \ bin \ openssl.cfg)
Valentin Heinitz,
@jww próbował tego, ale mówi mi, że set to nieprawidłowe polecenie. jakieś pomysły?
Sarah
3
@Sarah - setto polecenie systemu Windows i ma być uruchamiane z cmd.exe. Nie będzie działać na komputerze bez systemu Windows. setI echocoś nie działa w Elektrowni Shell, albo. Użyłbyś czegoś takiego $X=1; Write-Output $X.
jww
@jww dziękuję. Jestem na komputerze z systemem Windows, ale używałem tego polecenia w openssl.exe zamiast cmd.exe .. Przeczytałem Twój komentarz i przeszedłem do cmd.exe i zamiast tego wpisałem polecenie set. Działało poprawnie, ale nadal otrzymywałem ten sam błąd w pliku openssl.exe mówiącym „Nie można załadować informacji konfiguracyjnych z niewłaściwej_ścieżki / ssl / openssl.cnf”, więc wypróbowałem poniższe rozwiązanie, aby dodać parametr -config do katalogu openssl i działało idealnie. więc jestem szczęśliwy. dzięki za pomoc :)
Sarah
Powinien zostać oznaczony jako odpowiedź. Szczerze mówiąc, też powinno być niepotrzebne. Dlaczego ta dystrybucja OpenSSL Windows nie jest po prostu domyślna na przykład na PWD?
stonedauwg
40

Po prostu dodaj parametr do wiersza poleceń -config c:\your_openssl_path\openssl.cfg, zmieniając your_openssl_pathgo na rzeczywistą zainstalowaną ścieżkę.

Nikl
źródło
świetnie, śledzę ten wpis na blogu ajden.towfeek.se/post/ ... i dodanie -config działa również dla cygwin, np. $ openssl ca -in server.csr -config /etc/ssl/openssl.cnf Ale dlaczego to -config nie pojawia się w man openssl? openssl.org/docs/apps/openssl.html
barlop
@nneonneo wypróbowało to i powyższe rozwiązanie, ale mówi mi, że set i config to nieprawidłowe polecenia. jakieś pomysły?
Sarah
zestaw działa tylko w systemie Windows; config nie jest niezależną komendą (dodajesz ją do swojego wiersza poleceń OpenSSL).
nneonneo
29

Po prostu utwórz samodzielnie plik openssl.cnf, tak jak w kroku 4: http://www.flatmtn.com/article/setting-openssl-create-certificates

Edycja po tym, jak link przestał działać Zawartość pliku openssl.cnf była następująca:

#
# 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
Sam
źródło
1
Nie znaleziono już adresu URL
Greg Domjan
15
set OPENSSL_CONF=c:/{path to openSSL}/bin/openssl.cfg

zadbaj o odpowiednie rozszerzenie ( openssl.cfg nie cnf)!

Zainstalowałem OpenSSL stąd: http://slproweb.com/products/Win32OpenSSL.html


źródło
Link do instalacji pomógł, pobrałem 0.9.8 z innego miejsca i nie działało. Dziękuję Ci.
EpicPandaForce
14

Jeśli zainstalowałeś Apache z OpenSSL, przejdź do katalogu bin. W moim przypadku D: \ apache \ bin.

* Te polecenia działają również, jeśli masz samodzielną instalację openssl.

Uruchom te polecenia:

openssl req -config d:\apache\conf\openssl.cnf -new -out d:\apache\conf\server.csr -keyout d:\apache\conf\server.pem
openssl rsa -in d:\apache\conf\server.pem -out d:\apache\conf\server.key
openssl x509 -in d:\apache\conf\server.csr -out d:\apache\conf\server.crt -req -signkey d:\apache\conf\server.key -days 365

* Spowoduje to utworzenie certyfikatu z podpisem własnym, którego można użyć do celów programistycznych

Ponownie, jeśli masz zainstalowany Apache w httpd.conf, włóż następujące:

  <IfModule ssl_module>
    SSLEngine on
    SSLCertificateFile "D:/apache/conf/server.crt"
    SSLCertificateKeyFile "D:/apache/conf/server.key"
  </IfModule>
Artur Kędzior
źródło
Facet zadający pytanie wyraźnie stwierdził, że używa Win32OpenSSL. Skąd się wzięły rzeczy Apache? Jakie ma to znaczenie dla pytania?
jww
3
Oczywiście, że tak, instalacja OpenSSL, który jest dostarczany osobno lub z Apache to to samo. Dodałem bit Apache, ponieważ w 95% przypadków przyczyną instalacji OpenSSL w systemie Windows jest to, że będzie używany z Apache.
Artur Kędzior
Jest to przydatne, ponieważ XAMPP zawiera OpenSSL w folderze Apache.
Jimmy Adaro,
Działa jak urok!
Divyesh Prajapati
12

Po prostu spróbuj uruchomić openssl.exe jako administrator.

Serghei Grajdean
źródło
2
Nie musisz uruchamiać tych poleceń jako administrator, aby działały. Lepiej rozwiązać podstawowy problem.
jww
Jeśli jest zainstalowany w katalogu plików programu na dysku systemowym, uruchomienie polecenia z podwyższonymi uprawnieniami jest wymagane, w przeciwnym razie nie masz uprawnień do zapisu.
CodeManX
1
To zadziałało dla mnie. Nie wiem, dlaczego próbował uzyskać dostęp, C:\Program Files\Common Files\SSL/openssl.cnfa potem, gdy działał jako administrator, nagle nie obchodziło go, że nie mógł go znaleźć (i też nie utworzył pliku), ale to zadziałało, więc mnie to nie obchodzi zarówno.
Simon_Weaver
7

Właśnie miałem podobny błąd podczas używania openssl.exe z folderu bin Apache dla systemu Windows. Miałem flagę -config określoną przez miałem literówkę w ścieżce do pliku openssl.cnf. Myślę, że to znajdziesz

openssl req -config C:\OpenSSL\bin\openssl.conf -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

Powinien być

openssl req -config "C:\OpenSSL\bin\openssl.cnf" -x509 -days 365 -newkey rsa:1024 -keyout hostkey.pem -nodes -out hostcert.pem

Uwaga: conf powinien prawdopodobnie mieć wartość cnf .

Nic Cottrell
źródło
4

Jeśli instalacja openssl powiodła się, wyszukaj „OPENSSL” na dysku c, aby zlokalizować plik konfiguracyjny i ustawić ścieżkę.

set OPENSSL_CONF=<location where cnf is available>/openssl.cnf

Udało mi się.

hermes101
źródło
3

To obejście pomogło nam tak bardzo w mojej pracy (pomoc techniczna), że stworzyliśmy prosty plik wsadowy, który mogliśmy uruchomić z dowolnego miejsca (nie mieliśmy uprawnień, aby go zainstalować). To obejście ustawi zmienną, a następnie uruchomi OpenSSL. Otwiera również folder bin dla Ciebie (ponieważ w tym miejscu zostaną zapisane wszystkie utworzone lub zmodyfikowane pliki). Ponadto dotyczy to tylko systemu Windows.

Jak skonfigurować:

  1. Pobierz pliki binarne OpenSSL tutaj . (Zwróć uwagę, że to działa z wersją 0.9.8h).
  2. Skopiuj ten kod do pliku o nazwie StartOpenSSL.bat. Zapisz to w wybranej lokalizacji. Można go uruchomić z dowolnego miejsca.

    @echo off
    title OpenSSL
    
    cd\openssl\bin
    
    if exist "C:\openssl\share\openssl.cnf" (
    
    set OPENSSL_CONF=c:/openssl/share/openssl.cnf
    start explorer.exe c:\openssl\bin
    
    echo Welcome to OpenSSL
    
    openssl
    
    ) else (
    
    echo Error: openssl.cnf was not found
    echo File openssl.cnf needs to be present in c:\openssl\share
    pause
    
    )
    
    exit
    
  3. Po pobraniu plików binarnych OpenSSL wyodrębnij je na dysk C w folderze o nazwie OpenSSL. (Ścieżka musi być C: \ OpenSSL). Nie przenoś żadnych folderów, po prostu wyodrębnij je do folderu.
  4. Jesteś gotowy do korzystania z OpenSSL. Jest to świetne obejście dla użytkowników systemu Windows, którzy nie mają uprawnień do zainstalowania go, ponieważ nie wymaga uprawnień. Wystarczy uruchomić wcześniejszy plik bat, klikając go dwukrotnie.
Rex Linder
źródło
2

Problem polega na tym, że NIE MA pliku openssl.cnf podanego z programem GnuWin32 openssl. Musisz to stworzyć. Możesz dowiedzieć się, JAK utworzyć plik openssl.cnf, przechodząc tutaj:

http://www.flatmtn.com/article/setting-ssl-certificates-apache

Tam, gdzie przedstawia wszystko, jak to zrobić.

UWAGA: Polecenie openssl podane z ukośnikiem odwrotnym na końcu dotyczy systemu UNIX. W systemie Windows: 1) Usuń lewy ukośnik i 2) Przenieś drugą linię w górę, tak aby znajdowała się na końcu pierwszej linii. (Więc masz tylko jedno polecenie.)

RÓWNIEŻ: BARDZO ważne jest, aby przeczytać komentarze. Na ich podstawie możesz chcieć wprowadzić pewne zmiany.

Mark Manning
źródło
2

Miałem ten sam problem w systemie Windows. Problem został rozwiązany poprzez ustawienie zmiennej środowiskowej w następujący sposób:

Nazwa zmiennej: OPENSSL_CONF Wartość zmiennej: C: (katalog OpenSSl) \ bin \ openssl.cnf

Braullio Soares
źródło
1

Jeśli widzisz błąd, taki jak

błąd w linii -1 c: apacheconfopenssl.cnf

spróbuj zmienić ukośnik z tyłu na ukośnik w -config.

Jauyzed
źródło
1

https://github.com/xgqfrms-gildata/App001/issues/3

  1. najpierw upewnij się, że masz openssl.cnfplik we właściwej ścieżce;
  2. jeśli nie możesz go znaleźć, po prostu pobierz jeden i skopiuj go do ścieżki ustawień.
$ echo %OPENSSL_CONF%

$ set OPENSSL_CONF=C:\OpenSSL\bin\openssl.cnf
xgqfrms
źródło
OpenSSL i node.js
xgqfrms
nie można znaleźć C: \ OpenSSL \
Snehal Dwivedi
@SnehalDwivedi, proszę postępować zgodnie z opisem.
xgqfrms
0

Uruchom polecenie jako administrator i skopiuj plik konfiguracyjny do miejsca, w którym masz uprawnienia do odczytu, i określ ścieżkę za pomocą parametru -config.

Dexion
źródło
0

Wiem, że to jest stare - ale pomyślałem, że inne, które się w tym zdarzają (i używają Visual Studio), mogą skorzystać. Przeczytałem to w innym poście, którego nie mogę znaleźć.

Otwórz konfigurację w notatniku ++ i upewnij się, że kodowanie to UTF-8 (tj. Nie UTF-8-BOM *).

Oszczędziłoby mi to wiele poszukiwań / prób i błędów ...

jimnkey
źródło
0

Wiem, że to stare pytanie, ale oto jak je rozwiązałem.

Skopiowałem openssl.cnfplik z binkatalogu do katalogu nadrzędnego, który jest C:/Openssl/openssl.cnfzamiast C:/Openssl/bin/openssl.cnfi działał dobrze.

ahmed nader
źródło