OpenSSL và lỗi khi đọc tệp openssl.conf


119

Tôi đang chạy windows xp 32bit

Tôi vừa tải xuống Openssl từ URL sau và cài đặt nó. http://www.slproweb.com/products/Win32OpenSSL.html

và sau đó tôi đã cố gắng tạo chứng chỉ tự ký bằng cách sử dụng lệnh sau

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

sau đó nó bắt đầu đưa ra lỗi sau

Không thể tải thông tin cấu hình từ /usr/local/ssl/openssl.cnf

Sau đó, sau khi googling đôi khi tôi đã thay đổi lệnh trên thành

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

Nhưng bây giờ tôi gặp lỗi sau trong dấu nhắc lệnh

lỗi trên dòng -1 của C: \ OpenSSL \ bin \ openssl.conf
4220: error: 02001002: system library: fopen: Không có tệp hoặc thư mục như vậy:. \ crypto \ bio \ bss_file.c: 126: fopen ('C: \ OpenSSL \ bin \ openssl.conf ',' rb ') 4220: error: 2006D080: Các quy trình BIO: BIO_new_file: không có tệp như vậy:. \ Crypto \ bio \ bss_file.c: 129:
4220: error: 0E078072: các quy trình tệp cấu hình : DEF_LOAD: không có tệp nào như vậy:. \ Crypto \ conf \ conf_def.c: 197:

Xin vui lòng giúp đỡ. Cảm ơn trước.


3
kiểm tra tên tệp chính xác: openssl.conf ---> openssl.cnf
Đánh dấu

2
phần mở rộng tệp trên Windows hiện là .cfg. Đồng thời đảm bảo rằng đường dẫn tệp được chỉ định (trên dòng lệnh hoặc trong biến môi trường OPENSSL_CONF) không nằm trong dấu ngoặc kép.
tatx

Phần mở rộng tệp (.cnf / .cfg) dường như thay đổi tùy thuộc vào những gì được sử dụng để cài đặt OpenSSL. Trên bản cài đặt WampServer v3.2.2, tôi vừa tạo tên tệp cấu hình là openssl.cnf. Tôi cũng đã thực hiện cài đặt Window10 64-bit bằng cách sử dụng mã nhị phân từ Shining Path Productions. Tên tệp trong cài đặt đó là openssl.cfg. Sự khác biệt này trong tên phần mở rộng tệp cấu hình OpenSSL dường như phụ thuộc vào biên dịch. Tôi chưa kiểm tra tên tiện ích mở rộng nào được OpenSSL v1.1.1g nhận dạng.
Bill Vallance

Câu trả lời:


141

Trên Windows, bạn cũng có thể đặt thuộc tính môi trường OPENSSL_CONF. Ví dụ từ dòng lệnh, bạn có thể nhập:

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

để xác thực nó, bạn có thể nhập:

echo %OPENSSL_CONF%

Bạn cũng có thể đặt nó như một phần của các biến môi trường của máy tính để tất cả người dùng và dịch vụ đều có sẵn nó theo mặc định. Ví dụ, hãy xem các biến Môi trường trong Windows NTCách quản lý các biến Môi trường trong Windows XP .

Bây giờ bạn có thể chạy các lệnh openssl mà không cần phải truyền tham số vị trí cấu hình.


9
Cảm ơn, đã làm việc cho tôi! (đặt OPENSSL_CONF = c: \ openssl-win32 \ bin \ openssl.cfg)
Valentin Heinitz

@jww đã thử điều này nhưng nó cho tôi biết đặt là lệnh không hợp lệ. bất kỳ ý tưởng?
Sarah

3
@Sarah - setlà một lệnh Windows và nó có nghĩa là được chạy từ đó cmd.exe. Nó sẽ không hoạt động trên máy không phải Windows. Các setechođiều đó không làm việc trong Power Shell, một trong hai. Bạn sẽ sử dụng một cái gì đó như thế nào $X=1; Write-Output $X.
jww

@jww cảm ơn bạn. tôi đang sử dụng máy windows nhưng tôi đã sử dụng lệnh đó trong openssl.exe thay vì cmd.exe .. Tôi đọc nhận xét của bạn và truy cập cmd.exe và gõ lệnh set ở đó. Nó hoạt động chính xác nhưng tôi vẫn gặp lỗi tương tự trong openssl.exe nói rằng "Không thể tải thông tin cấu hình từ sai_path / ssl / openssl.cnf" vì vậy tôi đã thử giải pháp bên dưới nói thêm tham số -config với thư mục openssl của bạn và hoạt động hoàn hảo. Vì vậy tôi hạnh phúc. cảm ơn vì sự giúp đỡ :)
Sarah

Nên được đánh dấu là câu trả lời. Nói thẳng ra là không cần thiết quá. Tại sao phiên bản Windows OpenSSL này không chỉ đơn giản là mặc định cho PWD?
stonedauwg

40

Chỉ cần thêm vào dòng lệnh của bạn tham số -config c:\your_openssl_path\openssl.cfg, thay đổi your_openssl_paththành đường dẫn được cài đặt thực.


tuyệt vời, đã theo dõi bài đăng blog này ajden.towfeek.se/post/… và thêm -config cũng hoạt động cho cygwin, ví dụ: $ openssl ca -in server.csr -config /etc/ssl/openssl.cnf Nhưng tại sao -config đó không được liệt kê trong man openssl? openssl.org/docs/apps/openssl.html
barlop

@nneonneo đã thử điều này và giải pháp trên nhưng nó cho tôi biết set và config là các lệnh không hợp lệ. bất kỳ ý tưởng?
Sarah

thiết lập chỉ hoạt động trên Windows; config không phải là một lệnh độc lập (bạn nối nó vào dòng lệnh OpenSSL của mình).
nneonneo

29

Chỉ cần tự tạo tệp openssl.cnf như thế này ở bước 4: http://www.flatmtn.com/article/setting-openssl-create-certificates

Chỉnh sửa sau khi liên kết ngừng hoạt động Nội dung của tệp openssl.cnf như sau:

#
# 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 không còn được tìm thấy
Greg Domjan

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

chăm sóc phần mở rộng phù hợp ( openssl.cfg không phải cnf)!

Tôi đã cài đặt OpenSSL từ đây: http://slproweb.com/products/Win32OpenSSL.html


Liên kết cài đặt đã giúp đỡ, tôi đã tải xuống 0.9.8 từ một nơi khác và nó không hoạt động. Cảm ơn bạn.
EpicPandaForce

14

Nếu bạn đã cài đặt Apache với OpenSSL, hãy điều hướng đến thư mục bin. Trong trường hợp của tôi là D: \ apache \ bin.

* Các lệnh này cũng hoạt động nếu bạn cài đặt riêng openssl.

Chạy các lệnh sau:

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

* Điều này sẽ tạo chứng chỉ tự ký mà bạn có thể sử dụng cho mục đích phát triển

Một lần nữa nếu bạn đã cài đặt Apache trong thanh httpd.conf:

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

Người đặt câu hỏi rõ ràng rằng anh ta đang sử dụng Win32OpenSSL. Những thứ Apache đến từ đâu? Nó có liên quan đến câu hỏi như thế nào?
jww

3
Tất nhiên, cài đặt OpenSSL đi kèm riêng hoặc với Apache đều giống nhau. Tôi đã thêm bit Apache vì trong 95% trường hợp, lý do cài đặt OpenSSL trên Windows là vì nó sẽ được sử dụng với Apache.
Artur Kędzior

Điều này rất hữu ích vì XAMPP bao gồm OpenSSL bên trong thư mục Apache.
Jimmy Adaro

Làm việc như một cái duyên!
Divyesh Prajapati

12

Chỉ cần cố gắng chạy openssl.exe với tư cách quản trị viên.


2
Bạn không cần phải chạy các lệnh này với tư cách quản trị viên để chúng hoạt động. Tốt hơn là khắc phục sự cố cơ bản.
jww

Nếu nó được cài đặt vào thư mục tệp chương trình trên ổ đĩa hệ thống, thì việc chạy lệnh có quyền nâng cao là bắt buộc, nếu không thì bạn không có quyền ghi.
CodeManX

1
Điều này đã làm việc cho tôi. Tôi không biết tại sao nó lại cố gắng truy cậpC:\Program Files\Common Files\SSL/openssl.cnf và sau đó khi chạy với tư cách quản trị viên đột nhiên nó không quan tâm nó không thể tìm thấy nó (và cũng không tạo tệp) nhưng điều này đã làm việc cho tôi nên tôi không quan tâm hoặc.
Simon_Weaver

7

Tôi vừa gặp một lỗi tương tự khi sử dụng openssl.exe từ thư mục bin của Apache cho windows. Tôi có cờ -config được chỉ định bởi có lỗi đánh máy trong đường dẫn của tệp openssl.cnf. Tôi nghĩ bạn sẽ tìm thấy điều đó

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

nên là

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

Lưu ý: conf có lẽ nên là cnf .


4

Nếu cài đặt openssl thành công, hãy tìm kiếm "OPENSSL" trong ổ đĩa c để định vị tệp cấu hình và đặt đường dẫn.

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

Nó đã làm việc cho tôi.


3

Cách giải quyết này đã giúp chúng tôi rất nhiều trong công việc của tôi (Hỗ trợ kỹ thuật), chúng tôi đã tạo một tệp hàng loạt đơn giản mà chúng tôi có thể chạy từ mọi nơi (Chúng tôi không có quyền cài đặt nó). Cách giải quyết này sẽ đặt biến và sau đó chạy OpenSSL cho bạn. Nó cũng mở ra thư mục bin cho bạn (vì đây là nơi mọi tệp bạn tạo hoặc sửa đổi sẽ được lưu). Ngoài ra, điều này chỉ dành cho Windows.

Làm thế nào để thiết lập:

  1. Tải xuống tệp nhị phân OpenSSL tại đây . (Lưu ý rằng điều này được xác nhận là hoạt động với phiên bản 0.9.8h.)
  2. Sao chép mã này vào tệp có tên StartOpenSSL.bat. Lưu nó vào một vị trí mà bạn chọn. Nó có thể được chạy từ bất cứ đâu.

    @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. Khi bạn đã tải xuống các tệp nhị phân OpenSSL, hãy giải nén chúng vào ổ C của bạn trong một thư mục có tiêu đề OpenSSL. (Đường dẫn cần phải là C: \ OpenSSL). Không di chuyển bất kỳ nội dung thư mục nào xung quanh, chỉ cần giải nén chúng vào thư mục.
  4. Bạn đã sẵn sàng sử dụng OpenSSL. Đây là một giải pháp tuyệt vời cho người dùng Windows không có đặc quyền cài đặt nó vì nó không yêu cầu quyền. Chỉ cần chạy tệp bat từ trước đó bằng cách nhấp đúp vào nó.

2

Vấn đề ở đây là KHÔNG CÓ tệp openssl.cnf được cung cấp với nội dung openssl của GnuWin32. Bạn phải tạo ra nó. Bạn có thể tìm hiểu CÁCH tạo tệp openssl.cnf bằng cách vào đây:

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

Nơi nó đưa ra tất cả cho bạn về cách thực hiện.

XIN LƯU Ý: Lệnh openssl được đưa ra với dấu gạch chéo ngược ở cuối dành cho UNIX. Đối với Windows: 1) Loại bỏ dấu gạch chéo ngược và 2) Di chuyển dòng thứ hai lên trên để nó nằm ở cuối dòng đầu tiên. (Vì vậy, bạn chỉ nhận được một lệnh.)

CŨNG: Điều RẤT quan trọng là phải đọc qua các bình luận. Có một số thay đổi bạn có thể muốn thực hiện dựa trên chúng.


2

Tôi đã gặp vấn đề tương tự trên Windows. Nó đã được giải quyết bằng cách đặt biến môi trường như sau:

Tên biến: OPENSSL_CONF Giá trị biến: C: (Thư mục OpenSSl) \ bin \ openssl.cnf


1

Nếu bạn gặp lỗi như

lỗi trên dòng -1 c: apacheconfopenssl.cnf

hãy thử thay đổi từ dấu gạch chéo sau sang dấu gạch chéo trước trong -config.


1

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

  1. trước tiên, hãy đảm bảo rằng bạn có một openssl.cnftập tin ở đúng đường dẫn;
  2. nếu bạn không thể tìm thấy nó, chỉ cần tải xuống và sao chép nó vào đường dẫn cài đặt của bạn.
$ echo %OPENSSL_CONF%

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

OpenSSL & node.js
xgqfrms

không thể tìm thấy C: \ OpenSSL \
Snehal Dwivedi

@SnehalDwivedi vui lòng làm theo các bước như tôi đã mô tả.
xgqfrms

0

Chạy lệnh với tư cách quản trị viên và sao chép tệp cấu hình vào nơi bạn có quyền đọc và chỉ định đường dẫn với tham số -config.


0

Tôi biết điều này đã cũ - nhưng tôi nghĩ rằng những điều khác xảy ra với điều này (và sử dụng Visual Studio) có thể được lợi. Tôi đọc điều này trên một bài đăng khác mà tôi dường như không thể tìm thấy.

Mở cấu hình của bạn trong notepad ++ và đảm bảo Mã hóa của nó là UTF-8 (tức là không phải UTF-8-BOM *).

Điều này sẽ giúp tôi tiết kiệm rất nhiều lần tìm kiếm / thử nghiệm ...


0

Tôi biết câu hỏi này đã cũ nhưng đây là cách tôi giải quyết nó.

Tôi đã sao chép openssl.cnftệp từ binthư mục này sang thư mục mẹ C:/Openssl/openssl.cnfthay vì C:/Openssl/bin/openssl.cnfvà hoạt động tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.