OpenSSL และข้อผิดพลาดในการอ่านไฟล์ openssl.conf


119

ฉันใช้ windows xp 32 บิต

ฉันเพิ่งดาวน์โหลด 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

จากนั้นหลังจาก googling บางครั้งฉันเปลี่ยนคำสั่งด้านบนเป็น

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 ฉันยังติดตั้ง Window10 64 บิตโดยใช้ไบนารีจาก Shining Path Productions ชื่อไฟล์ในการติดตั้งนั้นคือ openssl.cfg ความแตกต่างในชื่อนามสกุลไฟล์คอนฟิกูเรชัน OpenSSL นี้ดูเหมือนจะขึ้นอยู่กับการคอมไพล์ ฉันยังไม่ได้ทดสอบว่าชื่อนามสกุลใดที่ OpenSSL v1.1.1g รู้จัก
Bill Vallance

คำตอบ:


141

ใน Windows OPENSSL_CONFคุณยังสามารถตั้งค่าคุณสมบัติสิ่งแวดล้อม ตัวอย่างเช่นจากบรรทัดคำสั่งคุณสามารถพิมพ์:

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

เพื่อตรวจสอบความถูกต้องคุณสามารถพิมพ์:

echo %OPENSSL_CONF%

คุณยังสามารถตั้งค่าให้เป็นส่วนหนึ่งของตัวแปรด้านสภาพแวดล้อมของคอมพิวเตอร์เพื่อให้ผู้ใช้และบริการทั้งหมดสามารถใช้งานได้ ดูตัวอย่างเช่นตัวแปรสภาพแวดล้อมใน Windows NTและวิธีการจัดการตัวแปรของสภาพแวดล้อมใน Windows XP

ตอนนี้คุณสามารถรันคำสั่ง openssl ได้โดยไม่ต้องผ่านพารามิเตอร์ config location


9
ขอบคุณทำงานให้ฉัน! (ตั้งค่า OPENSSL_CONF = c: \ openssl-win32 \ bin \ openssl.cfg)
Valentin Heinitz

@jww ลองสิ่งนี้ แต่มันบอกว่า set เป็นคำสั่งที่ไม่ถูกต้อง ความคิดใด ๆ
Sarah

3
@Sarah - setเป็นคำสั่งของ Windows cmd.exeและความหมายของมันจะถูกเรียกใช้จาก มันจะไม่ทำงานบนเครื่องที่ไม่ใช่ Windows setและechoสิ่งที่ไม่ทำงานในพลังงานเชลล์อย่างใดอย่างหนึ่ง $X=1; Write-Output $Xคุณจะใช้สิ่งที่ต้องการ
jww

@jww ขอบคุณครับ. ฉันใช้เครื่อง windows แต่ฉันใช้คำสั่งนั้นใน openssl.exe แทน cmd.exe .. ฉันอ่านความคิดเห็นของคุณแล้วไปที่ cmd.exe แล้วพิมพ์คำสั่ง set ที่นั่นแทน มันทำงานได้อย่างถูกต้อง แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกันใน openssl.exe ว่า "ไม่สามารถโหลดข้อมูลการกำหนดค่าจาก wrong_path / ssl / openssl.cnf" ดังนั้นฉันจึงลองวิธีแก้ปัญหาด้านล่างโดยบอกว่าให้เพิ่มพารามิเตอร์ -config ด้วยไดเร็กทอรี openssl ของคุณและ ที่ทำงานได้อย่างสมบูรณ์แบบ ฉันก็มีความสุข ขอบคุณสำหรับความช่วยเหลือ :)
Sarah

ควรทำเครื่องหมายเป็นคำตอบ ตรงไปตรงมาก็ไม่จำเป็นเช่นกัน เหตุใด OpenSSL Windows distro นี้จึงไม่เป็นเพียงค่าเริ่มต้นของ PWD
stonedauwg

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 เป็นคำสั่งที่ไม่ถูกต้อง ความคิดใด ๆ
Sarah

ชุดใช้งานได้บน 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 อีกต่อไป
Greg Domjan

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 bit เพราะใน 95% ของกรณีเหตุผลของการติดตั้ง OpenSSL บน Windows นั้นเป็นเพราะจะใช้กับ Apache
Artur Kędzior

สิ่งนี้มีประโยชน์เนื่องจาก XAMPP มี OpenSSL อยู่ภายในโฟลเดอร์ Apache
Jimmy Adaro

ทำงานอย่างมีเสน่ห์!
Divyesh Prajapati

12

เพียงแค่ลองเรียกใช้ openssl.exe ในฐานะผู้ดูแลระบบ


2
คุณไม่ควรเรียกใช้คำสั่งเหล่านี้ในฐานะผู้ดูแลระบบเพื่อให้ทำงานได้ การแก้ไขปัญหาพื้นฐานจะดีกว่า
jww

หากติดตั้งไว้ในไดเร็กทอรีไฟล์โปรแกรมบนไดรฟ์ระบบจำเป็นต้องเรียกใช้คำสั่งที่มีสิทธิ์ระดับสูงคุณจะไม่มีสิทธิ์เขียนเป็นอย่างอื่น
CodeManX

1
สิ่งนี้ได้ผลสำหรับฉัน ฉันไม่รู้ว่าทำไมมันถึงพยายามเข้าถึงC:\Program Files\Common Files\SSL/openssl.cnfและเมื่อเรียกใช้ในฐานะผู้ดูแลระบบทันใดนั้นก็ไม่สนใจว่าจะหาไม่พบ (และไม่ได้สร้างไฟล์ด้วย) แต่สิ่งนี้ใช้ได้กับฉันดังนั้นฉันจึงไม่สนใจ ทั้ง.
Simon_Weaver

7

ฉันเพิ่งมีข้อผิดพลาดที่คล้ายกันโดยใช้ openssl.exe จากโฟลเดอร์ Apache for windows bin ฉันมีแฟล็ก -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 ที่ให้มาพร้อมกับไฟล์ GnuWin32 openssl คุณต้องสร้างมันขึ้นมา คุณสามารถดูวิธีสร้างไฟล์ 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

ลองเปลี่ยนจาก back slash เป็น front slash ใน -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 \
Snehal Dwivedi

@SnehalDwivedi โปรดทำตามขั้นตอนตามที่อธิบายไว้
xgqfrms

0

รันคำสั่งในฐานะผู้ดูแลระบบและคัดลอกไฟล์กำหนดค่าไปยังที่ที่คุณมีสิทธิ์ในการอ่านและระบุพา ธ ด้วยพารามิเตอร์ -config


0

ฉันรู้ว่านี่เป็นเรื่องเก่า แต่คิดว่าคนอื่น ๆ ที่เกิดขึ้นกับสิ่งนี้ (และใช้ Visual Studio) อาจได้รับประโยชน์ ฉันอ่านสิ่งนี้ในโพสต์อื่นซึ่งดูเหมือนจะหาไม่เจอ

เปิดการกำหนดค่าของคุณใน notepad ++ และตรวจสอบให้แน่ใจว่าการเข้ารหัสเป็น UTF-8 (เช่นไม่ใช่ UTF-8-BOM *)

สิ่งนี้จะช่วยฉันประหยัดการค้นหา / ทดลองใช้งานได้มาก ...


0

ฉันรู้ว่าคำถามนี้เก่า แต่ฉันจะแก้ไขได้อย่างไร

ฉันคัดลอกopenssl.cnfไฟล์จากbinไดเร็กทอรีไปยังไดเร็กทอรีหลักซึ่งC:/Openssl/openssl.cnfแทนC:/Openssl/bin/openssl.cnfและใช้งานได้ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.