OpenSSL и ошибка при чтении файла openssl.conf


119

Я использую windows xp 32bit

Я только что загрузил Openssl по следующему URL-адресу и установил его. http://www.slproweb.com/products/Win32OpenSSL.html

а затем я попытался создать самоподписанный сертификат, используя следующую команду

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

затем он начал выдавать следующую ошибку

Невозможно загрузить информацию о конфигурации из /usr/local/ssl/openssl.cnf

Затем после поиска в Google я изменил указанную выше команду на

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

Но теперь я получаю следующую ошибку в командной строке

ошибка в строке -1 C: \ OpenSSL \ bin \ openssl.conf
4220: ошибка: 02001002: системная библиотека: fopen: нет такого файла или каталога:. \ crypto \ bio \ bss_file.c: 126: fopen ('C: \ OpenSSL \ bin \ openssl.conf ',' rb ') 4220: ошибка: 2006D080: подпрограммы BIO: BIO_new_file: нет такого файла:. \ Crypto \ bio \ bss_file.c: 129:
4220: ошибка: 0E078072: процедуры файла конфигурации : DEF_LOAD: такого файла нет:. \ Crypto \ conf \ conf_def.c: 197:

Пожалуйста помоги. Заранее спасибо.


3
проверьте точное имя файла: openssl.conf ---> openssl.cnf
Отметьте

2
расширение файла в Windows теперь .cfg. Также убедитесь, что указанный путь к файлу (в командной строке или в переменной среды OPENSSL_CONF) не заключен в кавычки.
tatx

Расширение файла (.cnf / .cfg), по-видимому, зависит от того, что использовалось для установки OpenSSL. При установке WampServer v3.2.2 я только что установил имя файла конфигурации openssl.cnf. Я также установил 64-разрядную версию Window10, используя двоичные файлы от Shining Path Productions. Имя файла в этой установке было openssl.cfg. Это различие в именах расширений файлов конфигурации OpenSSL, по-видимому, зависит от компиляции. Я еще не проверял, какое имя расширения распознается OpenSSL v1.1.1g.
Билл Валланс,

Ответы:


141

В Windows вы также можете установить свойство среды OPENSSL_CONF. Например, в командной строке вы можете ввести:

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

чтобы проверить это, вы можете ввести:

echo %OPENSSL_CONF%

Вы также можете установить его как часть переменных среды компьютера, чтобы он был доступен по умолчанию для всех пользователей и служб. См., Например, « Переменные среды» в Windows NT и « Как управлять переменными среды в Windows XP» .

Теперь вы можете запускать команды openssl без необходимости передавать параметр местоположения конфигурации.


9
Спасибо, у меня сработало! (установите OPENSSL_CONF = c: \ openssl-win32 \ bin \ openssl.cfg)
Валентин Хайниц

@jww пробовал это, но он говорит мне, что set - недопустимая команда. Любые идеи?
Сара

3
@Sarah - setэто команда Windows, и она предназначена для запуска cmd.exe. Это не будет работать на машине, отличной от Windows. setИ echoвещь не работает в Power Shell, либо. Вы бы использовали что-то вроде $X=1; Write-Output $X.
jww

@jww спасибо. Я нахожусь на машине с Windows, но я использовал эту команду в openssl.exe вместо cmd.exe. Я прочитал ваш комментарий, пошел в cmd.exe и вместо этого набрал команду set. Он работал правильно, но я все еще получал ту же ошибку в openssl.exe, говоря «Невозможно загрузить информацию о конфигурации из неправильного_путь / ssl / openssl.cnf», поэтому я попробовал решение ниже, в котором говорится, чтобы добавить параметр -config в ваш каталог openssl и это сработало идеально. так что я счастлив. спасибо за помощь :)
Сара

Следует отметить как ответ. Честно говоря, в этом тоже не должно быть необходимости. Почему этот дистрибутив OpenSSL для Windows, например, не просто по умолчанию использует PWD?
stonedauwg 01

40

Просто добавьте в свою командную строку параметр -config c:\your_openssl_path\openssl.cfg, изменив your_openssl_pathего на реальный установленный путь.


отлично, следил за этим сообщением в блоге ajden.towfeek.se/post/… и добавление -config работает и для cygwin, например, $ openssl ca -in server.csr -config /etc/ssl/openssl.cnf но почему этот -config не отображается в man openssl? openssl.org/docs/apps/openssl.html
barlop

@nneonneo пробовал это и вышеупомянутое решение, но он сообщает мне, что set и config являются недопустимыми командами. Любые идеи?
Сара

набор работает только в Windows; config не является независимой командой (вы добавляете ее в свою командную строку OpenSSL).
nneonneo

29

Просто создайте файл openssl.cnf самостоятельно, как показано на шаге 4: http://www.flatmtn.com/article/setting-openssl-create-certificates

Редактировать после того, как ссылка перестала работать . Содержимое файла openssl.cnf было следующим:

#
# 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
URL больше не найден
Грег Домьян

15
set OPENSSL_CONF=c:/{path to openSSL}/bin/openssl.cfg

позаботьтесь о правильном расширении ( openssl.cfg, а не cnf)!

Я установил OpenSSL отсюда: http://slproweb.com/products/Win32OpenSSL.html


Ссылка для установки помогла, я скачал 0.9.8 откуда-то еще, и она не работает. Спасибо.
EpicPandaForce

14

Если вы установили Apache с OpenSSL, перейдите в каталог bin. В моем случае D: \ apache \ bin.

* Эти команды также работают, если у вас установлена ​​автономная установка openssl.

Выполните эти команды:

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

* Это создаст самозаверяющий сертификат, который вы можете использовать в целях разработки.

Опять же, если у вас установлен Apache в httpd.conf, вставьте следующее:

  <IfModule ssl_module>
    SSLEngine on
    SSLCertificateFile "D:/apache/conf/server.crt"
    SSLCertificateKeyFile "D:/apache/conf/server.key"
  </IfModule>

Человек, задававший вопрос, четко заявил, что использует Win32OpenSSL. Откуда взялся материал Apache? Какое отношение это имеет к вопросу?
jww

3
Конечно, установка OpenSSL, поставляемого отдельно или с Apache, - это то же самое. Я добавил бит Apache, потому что в 95% случаев причина установки OpenSSL в Windows заключается в том, что он будет использоваться с Apache.
Artur Kędzior

Это полезно, потому что XAMPP включает OpenSSL внутри папки Apache.
Джимми

Работает как шарм!
Дивьеш Праджапати

12

Просто попробуйте запустить openssl.exe от имени администратора.


2
Вам не нужно запускать эти команды от имени администратора, чтобы они заработали. Лучше исправить основную проблему.
jww

Если он установлен в каталог программных файлов на системном диске, требуется запуск команды с повышенными правами, в противном случае у вас нет прав на запись.
CodeManX

1
Это сработало для меня. Я не знаю, почему он пытался получить доступ, C:\Program Files\Common Files\SSL/openssl.cnfа затем, когда он запускался как администратор, ему было все равно, что он не мог его найти (и не создавал файл), но это сработало для меня, поэтому мне все равно либо.
Simon_Weaver 02

7

У меня была аналогичная ошибка при использовании openssl.exe из папки bin Apache для Windows. У меня был указан флаг -config с опечаткой в ​​пути к файлу openssl.cnf. Я думаю ты найдешь это

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

должно быть

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

Примечание: conf, вероятно, должен быть cnf .


4

Если установка openssl прошла успешно, найдите «OPENSSL» на диске c, чтобы найти файл конфигурации и указать путь.

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

У меня получилось.


3

Этот обходной путь настолько помог нам в моей работе (техническая поддержка), что мы сделали простой командный файл, который можно было запускать откуда угодно (у нас не было разрешений на его установку). Этот обходной путь установит переменную, а затем запустит OpenSSL для вас. Он также открывает для вас папку bin (потому что именно здесь будут сохранены любые файлы, которые вы создаете или изменяете). Кроме того, это только для Windows.

Как настроить:

  1. Загрузите двоичные файлы OpenSSL здесь . (Обратите внимание, что это подтверждено для работы с версией 0.9.8h.)
  2. Скопируйте этот код в файл с именем StartOpenSSL.bat. Сохраните это в любом месте по вашему выбору. Его можно запустить откуда угодно.

    @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. После того, как вы загрузили двоичные файлы OpenSSL, извлеките их на диск C в папку с названием OpenSSL. (Путь должен быть C: \ OpenSSL). Не перемещайте содержимое папок, просто извлеките их в папку.
  4. Вы готовы использовать OpenSSL. Это отличный обходной путь для пользователей Windows, у которых нет прав на его установку, поскольку для этого не требуются разрешения. Просто запустите предыдущий файл bat, дважды щелкнув его.

2

Проблема здесь в том, что НЕТ файла openssl.cnf, предоставленного с материалом openssl GnuWin32. Вы должны это создать. Вы можете узнать, КАК создать файл openssl.cnf, перейдя сюда:

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

Где вам все объясняется, как это сделать.

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: команда openssl с обратной косой чертой в конце предназначена для UNIX. Для Windows: 1) Удалите обратную косую черту и 2) Переместите вторую строку вверх, чтобы она оказалась в конце первой строки. (Таким образом, вы получаете всего одну команду.)

ТАКЖЕ: ОЧЕНЬ важно прочитать комментарии. На их основе вы можете внести некоторые изменения.


2

У меня была такая же проблема в Windows. Это было решено путем установки переменной среды следующим образом:

Имя переменной: OPENSSL_CONF Значение переменной: C: (OpenSSl Directory) \ bin \ openssl.cnf


1

Если вы видите что-то вроде ошибки

ошибка в строке -1 c: apacheconfopenssl.cnf

попробуйте изменить косую черту с обратной на переднюю в -config.


1

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

  1. сначала убедитесь, что у вас есть openssl.cnfфайл по правильному пути;
  2. Если вы не можете его найти, просто загрузите его и скопируйте в свой путь настройки.
$ echo %OPENSSL_CONF%

$ set OPENSSL_CONF=C:\OpenSSL\bin\openssl.cnf

OpenSSL и node.js
xgqfrms

не удалось найти C: \ OpenSSL \
Снехал Двиведи

@SnehalDwivedi, пожалуйста, следуйте инструкциям, как я описал.
xgqfrms,

0

Запустите команду от имени администратора и скопируйте файл конфигурации туда, где у вас есть права чтения, и укажите путь с параметром -config.


0

Я знаю, что это устарело, но подумал, что другие, которые случаются с этим (и используют Visual Studio), могут выиграть. Я прочитал это в другом посте, который, похоже, не нашел.

Откройте свою конфигурацию в блокноте ++ и убедитесь, что это кодировка UTF-8 (т.е. не UTF-8-BOM *).

Это избавило бы меня от многих поисков / проб и ошибок ...


0

Я знаю, что этот вопрос старый, но вот как я его решил.

Я скопировал openssl.cnfфайл из binкаталога в родительский каталог, который C:/Openssl/openssl.cnfвместо этого, C:/Openssl/bin/openssl.cnfи работал нормально.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.