ไม่สามารถโหลดข้อมูลการกำหนดค่าจาก /usr/local/ssl/openssl.cnf บน Windows


184

ในขณะที่ใช้ OpenSSL บน Windows:

openssl genrsa -out privatekey.pem 1024 -->

สร้างสำเร็จแล้ว

openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 
---->

แสดงข้อความข้อผิดพลาดเป็น

ไม่สามารถโหลดข้อมูลการกำหนดค่าจาก /usr/local/ssl/openssl.cnf


4
คำตอบทั้งหมดแสดงให้เห็นว่าอย่างใดอย่างหนึ่งจะต้องอ้างอิงไฟล์ config openssl.cnf .. แต่ไม่มีใครพูดถึงไฟล์ config อะไร ?? ใครเป็นคนสร้าง เนื้อหาของมันคืออะไร?
joedotnot

คำตอบ:


170

หลังจากติดตั้ง OpenSSL ฉันต้องสร้างตัวแปรสภาพแวดล้อมใหม่:

  • ชื่อ: OPENSSL_CONF
  • ราคา: C:\Program Files\OpenSSL\openssl.cnf

ใน PowerShell:

$env:OPENSSL_CONF = "${env:ProgramFiles}\OpenSSL\openssl.cnf"

ค่านี้แตกต่างจากเวอร์ชันการติดตั้งก่อนหน้า (ดังที่เห็นในการแก้ไขโพสต์ก่อนหน้านี้) นอกจากนี้อย่าลืมเพิ่มโฟลเดอร์ openssl binary ${env:ProgramFiles}\OpenSSLใน Path ของคุณ


16
ในเวอร์ชั่น 1.0.1j ฉันต้องใช้C:\OpenSSL-Win32\bin\openssl.cfgแทน
Kevin Panko

7
หรือ C: \ OpenSSL-Win64 \ bin \ openssl.cfg ในระบบ
64 บิต

13
หรือC:\Program Files (x86)\Git\ssl\openssl.cfgสำหรับผู้ที่มีคอมไพล์แล้ว
kspearrin

คุณจะตั้งค่านี้ที่ไหน / อย่างไร
matthew_360

สิ่งนี้จะนำไปไว้ในสภาพแวดล้อมการเริ่มต้นของผู้ใช้ของคุณ:SETX OPENSSL_CONF c:/libs/openssl-0.9.8k/openssl.cnf
Ross Presser

78

คุณควรระบุพา ธ สัมบูรณ์ไปยังการกำหนดค่าดังนี้:

openssl req -x509 -config "C:\OpenSSL-Win64\bin\openssl.cnf" ...

36
-config C: \ OpenSSL-Win64 \ bin \ openssl.cnf
TimK

4
ในเวอร์ชั่น 1.0.1e ดาวน์โหลดจากslproweb.com/products/Win32OpenSSL.htmlมีไฟล์openssl.cfgอยู่ในไดเรกทอรี bin เท่านั้นหลังจากการติดตั้ง แต่ดูเหมือนว่าไฟล์นี้จะใช้งานได้อยู่ดี
vanje

9
หากคุณกำลังใช้ OpenSSL ที่มาพร้อมกับ Git คุณอาจลอง-config "C:\Program Files (x86)\Git\ssl\openssl.cnf"
Joel B

2
openssl: ข้อผิดพลาด: '-config' เป็นคำสั่งที่ไม่ถูกต้อง พวกคุณตั้งมันยังไงกัน?
benez

1
@kewlbfy ดูคำตอบ @Kosar ด้านล่างเพื่อที่จะใช้-configธงนี้ทำงานให้ฉัน
danjah

36

ใน Windows 10 ไม่จำเป็นต้องรีสตาร์ทหรือเรียกใช้ในโหมดผู้ดูแลระบบ แต่ตั้งค่า openssl config แทนดังนี้:

set OPENSSL_CONF=C:\Program Files (x86)\GnuWin32\share\openssl.cnf

แน่นอนถ้าคุณกำลังใช้ GnuWin32


20

ใน windows [ สถานการณ์คล้ายกัน ]

ฉันประสบปัญหาเดียวกัน แต่ในระหว่างที่ขอการลงนามใบรับรอง

ฉันทำด้านล่างมันได้ผลสำหรับฉัน

เมื่อติดตั้ง OpenSSL แล้ว Ran command prompt ในฐานะผู้ดูแลระบบหลังจากรีบูตระบบ [เพื่อสิ่งที่ดีที่สุดที่ฉันทำทั้งสองอย่าง .. .. รันในฐานะผู้ดูแลระบบและรีบูตระบบ]

ได้, 1. [กรณีข้อผิดพลาด]

C:\OpenSSL-Win64\bin>openssl req -new -key server.key -out server.csr

คำเตือน: ไม่สามารถเปิดไฟล์กำหนดค่า: C: \ OpenSSL-Win64 \ bin \ openssl.cnf และไม่สามารถโหลดข้อมูลการกำหนดค่าจาก C: \ OpenSSL-Win64 \ bin \ openssl.cnf

2. [ทำงานด้วยคำเตือน]

C:\OpenSSL-Win64\bin> openssl req -new -key server.key -out server.csr -config C:\OpenSSL-Win64\bin\openssl.cfg

[ข้อความเตือน]: คำเตือน: ไม่สามารถเปิดไฟล์กำหนดค่า: C: \ OpenSSL-Win64 \ bin \ openssl.cnf

แต่ถามฉันสำหรับวลีรหัสผ่านสำหรับ server.key มันทำงานสำหรับฉัน

ฉันแนะนำลิงค์นี้เพื่อขอความช่วยเหลือ

ขอบคุณ.


ขอบคุณลิงค์ที่คุณให้ไว้ช่วยฉันอย่างมาก: akadia.com/services/ssh_test_certificate.html
leole

15

เพียงสิ่งที่ทำงานสำหรับฉันในสถานการณ์เช่นนี้เป็นที่สร้างขึ้นเอง 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
ต้องลองวิธีแก้ปัญหาอื่น ๆ ทั้งหมดที่ระบุไว้ที่นี่วิธีนี้ใช้ได้สำหรับฉัน เมื่อสร้างการกำหนดค่าแล้ว (ในไดเรกทอรี openssl.exe) คุณสามารถเรียกใช้ได้openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 -config openssl.cnf
Jimbo

12

หลังจากติดตั้ง OpenSSL Run As Administratorคุณจะต้องรีสตาร์ทเครื่องคอมพิวเตอร์และการใช้งานของคุณ จากนั้นก็ใช้งานได้


11

ด้วยเครื่องมือ GnuWin32 ฉันพบ openssl.cnf ภายใต้ C: \ gnuwin32 \ share

set OPENSSL_CONF=C:\gnuwin32\share\openssl.cnf

9

สำหรับฉันใน Windows 8 ฉันพบไฟล์ openssl.cnf และคัดลอกลงในไดรฟ์ C แล้ว:

openssl req -new -key server.key -out server.csr -config C:\openssl.cnf

ทำงานได้อย่างสมบูรณ์แบบ



4

ในกรณีของฉันฉันต้องตั้งค่าเส้นทางของไฟล์openssl.cnfด้วยตนเองในคำสั่งโดยใช้configตัวเลือก ดังนั้นคำสั่ง

openssl req -x509 -config "C:\Users\sk\Downloads\openssl-0.9.8k_X64\openssl.cnf" -newkey rsa:4096 -keyout key.pem -out cert.pem -nodes -days 900

3

หากคุณใช้Win32 OpenSSL v1.1.0gให้ตั้งค่าตัวแปรสภาพแวดล้อมนี้:

set OPENSSL_CONF=C:\OpenSSL-Win32\bin\cnf\openssl.cnf

ก่อนรันคำสั่งนี้ด้วย"server.key"ให้สร้าง"server.csr" สำเร็จ :

openssl req -new -key server.key -out server.csr

1

ในคำถามพื้นฐานว่าทำไมไม่พบ openssl: คำตอบสั้น ๆ : แพ็คเกจการติดตั้งบางส่วนสำหรับ openssl มีค่าเริ่มต้น openssl.cnf รวมอยู่ด้วย แพ็คเกจอื่น ๆ ทำไม่ได้ ในกรณีหลังคุณจะต้องรวมหนึ่งจากลิงค์ที่แสดงด้านล่าง; คุณสามารถป้อนชื่อผู้ใช้เพิ่มเติม --DN ชื่อและอื่น ๆ ได้ตามต้องการ

จากhttps://www.openssl.org/docs/manmaster/man5/config.html,Iอ้างโดยตรง:

"การกำหนดค่าห้องสมุดของ OPENSSL

แอปพลิเคชันสามารถกำหนดค่าบางแง่มุมของ OpenSSL โดยอัตโนมัติโดยใช้ไฟล์กำหนดค่า OpenSSL หลักหรืออาจเป็นไฟล์กำหนดค่าทางเลือกก็ได้ ยูทิลิตี้ openssl รวมถึงฟังก์ชั่นนี้: คำสั่งย่อยใด ๆ ใช้ไฟล์คอนฟิกูเรชัน OpenSSL หลักยกเว้นว่ามีการใช้ตัวเลือกในคำสั่งย่อยเพื่อใช้ไฟล์กำหนดค่าทางเลือก

ในการเปิดใช้งานการกำหนดค่าไลบรารีส่วนเริ่มต้นจะต้องมีบรรทัดที่เหมาะสมซึ่งชี้ไปยังส่วนการกำหนดค่าหลัก ชื่อเริ่มต้นคือ openssl_conf ซึ่งยูทิลิตี้ openssl ใช้ แอปพลิเคชันอื่น ๆ อาจใช้ชื่ออื่นเช่น myapplication_conf บรรทัดการกำหนดค่าไลบรารีทั้งหมดจะปรากฏในส่วนเริ่มต้นที่จุดเริ่มต้นของไฟล์การกำหนดค่า

ส่วนการกำหนดค่าควรประกอบด้วยชุดคู่ค่าชื่อที่มีข้อมูลการกำหนดค่าโมดูลเฉพาะ ชื่อแสดงถึงชื่อของโมดูลการกำหนดค่า ความหมายของค่าเป็นโมดูลเฉพาะ: ตัวอย่างเช่นมันอาจหมายถึงส่วนการกำหนดค่าเพิ่มเติมที่มีข้อมูลเฉพาะของโมดูลการกำหนดค่า เช่น:"

ดังนั้นจึงปรากฏว่าเราต้องกำหนดค่า openssl.cnf ด้วยตนเองตามชื่อเฉพาะ (DN) ของคุณพร้อมกับรายการอื่น ๆ ที่เฉพาะเจาะจงสำหรับการใช้งานของคุณ

นี่คือไฟล์เทมเพลตที่คุณสามารถสร้าง openssl.cnf ด้วยรายการเฉพาะของคุณ

แอปพลิเคชั่นเดียวมีการติดตั้งตัวอย่างที่มีไฟล์. cnf สาธิต

นอกจากนี้หากคุณต้องการเข้าถึงไฟล์. cnf โดยทางโปรแกรมคุณสามารถรวมส่วนหัวที่เหมาะสม --openssl / conf.h-- และแยกวิเคราะห์ไฟล์. cnf ของคุณโดยใช้

CONF_modules_load_file(const char *filename, const char *appname,
                            unsigned long flags);

นี่คือเอกสารสำหรับ "CONF_modules_load_file";


0

สำหรับฉันใส่ตัวแปรก่อนที่จะโทรได้หลอกลวง:

OPENSSL_CONF=/usr/ssl/openssl.cnf openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365

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