OpenSSL e erro na leitura do arquivo openssl.conf

119

Estou executando o windows xp 32bit

Acabei de baixar o Openssl do seguinte URL e o instalei. http://www.slproweb.com/products/Win32OpenSSL.html

e, em seguida, tentei criar um certificado autoassinado usando o seguinte comando

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

então começou a dar o seguinte erro

Não foi possível carregar as informações de configuração em /usr/local/ssl/openssl.cnf

Depois de pesquisar no Google, mudei o comando acima para

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

Mas agora eu recebo o seguinte erro no prompt de comando

erro na linha -1 de C: \ OpenSSL \ bin \ openssl.conf
4220: erro: 02001002: biblioteca do sistema: fopen: Esse arquivo ou diretório não existe:. \ crypto \ bio \ bss_file.c: 126: fopen ('C: \ OpenSSL \ bin \ openssl.conf ',' rb ') 4220: erro: 2006D080: rotinas BIO: BIO_new_file: não existe esse arquivo:. \ Crypto \ bio \ bss_file.c: 129:
4220: erro: 0E078072: rotinas de arquivos de configuração : DEF_LOAD: não existe esse arquivo:. \ Crypto \ conf \ conf_def.c: 197:

Por favor ajude. Desde já, obrigado.

Sreeram
fonte
3
verifique nome exato: openssl.conf ---> openssl.cnf
Mark
2
a extensão do arquivo no Windows agora é .cfg. Verifique também se o caminho do arquivo especificado (na linha de comandos ou na variável de ambiente OPENSSL_CONF) não está entre aspas.
tatx
A extensão do arquivo (.cnf / .cfg) parece variar dependendo do que foi usado para instalar o OpenSSL. Em uma instalação do WampServer v3.2.2, acabei de fazer o nome do arquivo de configuração como openssl.cnf. Também fiz uma instalação do Window10 de 64 bits usando os binários da Shining Path Productions. O nome do arquivo nessa instalação foi openssl.cfg. Essa diferença nos nomes de extensão do arquivo de configuração do OpenSSL parece depender da compilação. Ainda não testei qual nome de extensão é reconhecido pelo OpenSSL v1.1.1g.
Bill Vallance

Respostas:

140

No Windows, você também pode definir a propriedade do ambiente OPENSSL_CONF. Por exemplo, na linha de comando, você pode digitar:

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

para validá-lo, você pode digitar:

echo %OPENSSL_CONF%

Você também pode configurá-lo como parte das variáveis ​​ambientais do computador, para que todos os usuários e serviços o disponibilizem por padrão. Consulte, por exemplo, Variáveis ​​de ambiente no Windows NT e Como gerenciar variáveis ​​de ambiente no Windows XP .

Agora você pode executar comandos openssl sem precisar passar o parâmetro local da configuração.

dvtoever
fonte
9
Obrigado, trabalhou para mim! (Conjunto OPENSSL_CONF = c: \ openssl-Win32 \ bin \ openssl.cfg)
Valentin Heinitz
@jww tentei isso, mas ele me diz que set é um comando inválido. alguma ideia?
Sarah
3
@ Sarah - seté um comando do Windows e deve ser executado a partir de cmd.exe. Não funcionará em uma máquina que não seja Windows. A coisa sete echotambém não funciona no Power Shell. Você usaria algo como $X=1; Write-Output $X.
JWW
@jww obrigado. Eu estou em uma máquina Windows, mas eu estava usando esse comando no openssl.exe em vez de cmd.exe .. Eu li seu comentário e fui para cmd.exe e digitei o comando set lá. Funcionou corretamente, mas eu ainda estava recebendo o mesmo erro no openssl.exe dizendo "Não foi possível carregar as informações de configuração de wrong_path / ssl / openssl.cnf", então tentei a solução abaixo dizendo para adicionar o parâmetro -config no diretório openssl e isso funcionou perfeitamente. então eu estou feliz. obrigado pela ajuda :)
Sarah
Deve ser marcado como resposta. Francamente, também deve ser desnecessário. Por que essa distribuição do Windows OpenSSL não é simplesmente padrão para PWD, por exemplo?
Stonedauwg 01/04/19
40

Basta adicionar à sua linha de comando o parâmetro -config c:\your_openssl_path\openssl.cfg, mudando your_openssl_pathpara o caminho real instalado.

Nikl
fonte
ótimo, acompanhando este post do blog ajden.towfeek.se/post/… e adicionando -config também funciona para o cygwin, por exemplo. $ openssl ca -in server.csr -config /etc/ssl/openssl.cnf Mas por que esse -config não é listado no man openssl? openssl.org/docs/apps/openssl.html
barlop
O @nneonneo tentou isso e a solução acima, mas ele diz que set e config são comandos inválidos. alguma ideia?
Sarah
set funciona apenas no Windows; config não é um comando independente (você o anexa à sua linha de comando OpenSSL).
Nneonneo 31/01
29

Basta criar você mesmo o arquivo openssl.cnf, na etapa 4: http://www.flatmtn.com/article/setting-openssl-create-certificates

Editar após o link parar de funcionar O conteúdo do arquivo openssl.cnf era o seguinte:

#
# 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
fonte
1
URL não encontrado mais
Greg Domjan
15
set OPENSSL_CONF=c:/{path to openSSL}/bin/openssl.cfg

cuide da extensão correta ( openssl.cfg não cnf)!

Instalei o OpenSSL a partir daqui: http://slproweb.com/products/Win32OpenSSL.html


fonte
O link da instalação ajudou, eu baixei o 0.9.8 de outro lugar e ele não estava funcionando. Obrigado.
EpicPandaForce
14

Se você instalou o Apache com OpenSSL, navegue para o diretório bin. No meu caso, D: \ apache \ bin.

* Esses comandos também funcionam se você tiver uma instalação independente do openssl.

Execute estes comandos:

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

* Isso criará um certificado autoassinado que você pode usar para fins de desenvolvimento

Novamente, se você tiver o Apache instalado no httpd.conf, cole-os:

  <IfModule ssl_module>
    SSLEngine on
    SSLCertificateFile "D:/apache/conf/server.crt"
    SSLCertificateKeyFile "D:/apache/conf/server.key"
  </IfModule>
Artur Kędzior
fonte
O sujeito que fez a pergunta afirmou claramente que estava usando o Win32OpenSSL. De onde vieram as coisas do Apache? Como isso é relevante para a questão?
JWW
3
É claro que instalar o OpenSSL que vem separadamente ou com o Apache é a mesma coisa. Eu adicionei o bit Apache porque em 95% dos casos o motivo da instalação do OpenSSL no Windows é porque será usado com o Apache.
Artur Kędzior 29/08/14
Isso é útil porque o XAMPP inclui o OpenSSL dentro da pasta Apache.
Jimmy Adaro
Trabalhando como um encanto!
Divyesh Prajapati
12

Apenas tente executar o openssl.exe como administrador.

Serghei Grajdean
fonte
2
Você não precisa executar esses comandos como administrador para fazê-los funcionar. É melhor corrigir o problema subjacente.
JWW
Se estiver instalado no diretório de arquivos do programa na unidade do sistema, é necessário executar o comando com direitos elevados, caso contrário, você não terá permissões de gravação.
CodeManX 15/10
1
Isso funcionou para mim. Eu não sei por que ele estava tentando acessar C:\Program Files\Common Files\SSL/openssl.cnfe, em seguida, ao executar como administrador de repente, não se importou, não conseguiu encontrá-lo (nem criou o arquivo), mas isso funcionou para mim, então não me importo ou.
22617 Simon_Weaver
7

Eu apenas tive um erro semelhante ao usar o openssl.exe da pasta Apache para Windows Bin. Eu tinha o sinalizador -config especificado por um erro de digitação no caminho do arquivo openssl.cnf. Eu acho que você encontrará isso

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

deveria estar

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

Nota: o conf provavelmente deve ser cnf .

Nic Cottrell
fonte
4

Se a instalação do openssl tiver êxito, procure "OPENSSL" na unidade c para localizar o arquivo de configuração e definir o caminho.

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

Funcionou para mim.

hermes101
fonte
3

Essa solução alternativa nos ajudou muito no meu trabalho (suporte técnico), criamos um arquivo em lotes simples que poderíamos executar em qualquer lugar (não tínhamos permissões para instalá-lo). Esta solução alternativa definirá a variável e executará o OpenSSL para você. Ele também abre a pasta bin para você (porque é onde os arquivos criados ou modificados serão salvos). Além disso, isso é apenas para Windows.

Como configurar:

  1. Faça o download dos binários OpenSSL aqui . (Observe que isso está confirmado para funcionar com a versão 0.9.8h.)
  2. Copie esse código para um arquivo chamado StartOpenSSL.bat. Salve isso em um local de sua escolha. Pode ser executado de qualquer lugar.

    @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. Depois de baixar os binários do OpenSSL, extraia-os para a unidade C em uma pasta chamada OpenSSL. (O caminho precisa ser C: \ OpenSSL). Não mova nenhum conteúdo da pasta, apenas extraia-o para a pasta.
  4. Você está pronto para usar o OpenSSL. Essa é uma ótima solução alternativa para usuários do Windows que não têm privilégios para instalá-lo, pois não requer permissões. Basta executar o arquivo bat anteriormente, clicando duas vezes nele.
Rex Linder
fonte
2

O problema aqui é que NÃO existe um arquivo openssl.cnf fornecido com o material openssl do GnuWin32. Você precisa criá-lo. Você pode descobrir como criar um arquivo openssl.cnf aqui:

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

Onde tudo indica para você como fazê-lo.

ATENÇÃO: O comando openssl fornecido com a barra invertida no final é para UNIX. Para Windows: 1) Remova a barra invertida e 2) Mova a segunda linha para cima para que ela fique no final da primeira linha. (Então você obtém apenas um comando.)

TAMBÉM: É MUITO importante ler os comentários. Há algumas mudanças que você pode querer fazer com base nelas.

Mark Manning
fonte
2

Eu tive o mesmo problema no Windows. Foi resolvido configurando a variável de ambiente da seguinte maneira:

Nome da variável: OPENSSL_CONF Valor da variável: C: (Diretório OpenSSl) \ bin \ openssl.cnf

Braullio Soares
fonte
1

Se você estiver vendo um erro, algo como

erro na linha -1 c: apacheconfopenssl.cnf

tente mudar da barra traseira para a barra frontal no -config.

Jauyzed
fonte
1

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

  1. primeiro, verifique se você tem um openssl.cnfarquivo no caminho certo;
  2. se não conseguir encontrá-lo, faça o download de um e copie-o para o caminho de configuração.
$ echo %OPENSSL_CONF%

$ set OPENSSL_CONF=C:\OpenSSL\bin\openssl.cnf
xgqfrms
fonte
OpenSSL & node.js
xgqfrms
não foi possível encontrar C: \ OpenSSL \
Snehal Dwivedi
@SnehalDwivedi, siga as etapas descritas.
xgqfrms 29/06
0

Execute o comando como administrador e copie o arquivo de configuração para algum lugar onde você tenha direitos de leitura e especifique o caminho com o parâmetro -config.

Dexion
fonte
0

Eu sei que isso é antigo - mas pensei que outros que acontecem nisso (e usam o Visual Studio) possam se beneficiar. Eu li isso em outro post que não consigo encontrar.

Abra sua configuração no bloco de notas ++ e verifique se a codificação é UTF-8 (ou seja, não UTF-8-BOM *).

Isso me pouparia um monte de busca / julgamento'n'erros ...

jimnkey
fonte
0

Eu sei que esta pergunta é antiga, mas aqui está como eu a resolvi.

Copiei o openssl.cnfarquivo do bindiretório para o diretório pai, que está em C:/Openssl/openssl.cnfvez de C:/Openssl/bin/openssl.cnfe funcionou bem.

ahmed nader
fonte