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ę.


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.


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ę.


ś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

1
Nie znaleziono już adresu URL
— Greg Domjan


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>

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.


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 .


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ę.


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.

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.


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


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.



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.


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 ...


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.