วิธีการใช้อาร์กิวเมนต์รหัสผ่านในผ่านบรรทัดคำสั่งเพื่อ openssl สำหรับการถอดรหัส


54

ดังนั้นจึงไม่ใช่วิธีที่ปลอดภัยที่สุดในการส่งรหัสผ่านเข้าในอาร์กิวเมนต์บรรทัดคำสั่ง ที่กล่าวว่าเอกสารประกอบสำหรับ openssl ทำให้ฉันสับสนในการส่งผ่านอาร์กิวเมนต์รหัสผ่านไปยังคำสั่ง openssl

นี่คือสิ่งที่ฉันพยายามทำ

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d

จากนั้นระบบจะถามรหัสผ่านสำหรับการถอดรหัส ฉันค้นหาเอกสาร openssl และ interwebs เพื่อลองค้นหาคำตอบถ้าฉันเพียงต้องการให้รหัสผ่านกับคำสั่งโดยไม่พยายามสะท้อนรหัสผ่านกับไฟล์ ฉันพยายามเพิ่ม-pass:somepasswordและ-pass somepasswordทั้งที่มีและไม่มีเครื่องหมายคำพูดไม่มีประโยชน์

ในที่สุดฉันก็หาคำตอบและเห็นในฟอรัมอื่น ๆ ที่คนมีคำถามคล้าย ๆ กันดังนั้นฉันคิดว่าฉันจะโพสต์คำถามและตอบคำถามที่นี่เพื่อชุมชน

หมายเหตุ: ฉันใช้ openssl เวอร์ชัน 0.9.8y

คำตอบ:


108

เอกสารไม่ชัดเจนสำหรับฉัน แต่มีคำตอบความท้าทายไม่สามารถดูตัวอย่างได้

นี่คือวิธีการ:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -pass pass:somepassword

โปรดสังเกตว่าไวยากรณ์คำสั่งบรรทัดคำสั่งจะ-passตามด้วยช่องว่างเสมอและประเภทของวลีรหัสผ่านที่คุณกำลังให้บริการเช่นpass:สำหรับข้อความรหัสผ่านธรรมดาและข้อความรหัสผ่านจริงตามหลังโคลอนโดยไม่มีช่องว่าง

นอกจากนี้เอกสารระบุว่าคุณสามารถระบุแหล่งที่มาของวลีรหัสผ่านอื่น ๆ

  • env:somevar เพื่อรับรหัสผ่านจากตัวแปรสภาพแวดล้อม
  • file:somepathname เพื่อรับรหัสผ่านจากบรรทัดแรกของไฟล์ที่ตำแหน่ง pathname
  • fd:number เพื่อรับรหัสผ่านจากหมายเลขตัวอธิบายไฟล์
  • stdin เพื่ออ่านจากอินพุตมาตรฐาน

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

ด้วย OpenSSL 1.0.1e พารามิเตอร์ที่จะใช้เป็นหรือ-passin -passoutดังนั้นตัวอย่างนี้จะเป็น:

openssl aes-256-cbc -in some_file.enc -out some_file.unenc -d -passin pass:somepassword


ความแตกต่างระหว่างการใช้ passin หรือ passout คืออะไร? - ฮา! เพียงแค่มองมัน stdin vs stdout แน่นอน!
dtmland

โปรดทราบว่าเอกสารประกอบสำหรับตัวเลือกรหัสผ่านที่ใช้กับคำสั่งส่วนใหญ่ openssl (ไม่ใช่แค่enc) อยู่ใน man page สำหรับ openssl (1) บนเว็บภายใต้ 'OPTIONS' แต่ฉันไม่เชื่อว่าบิตสุดท้ายของคุณเกี่ยวกับ -passin / out; คำสั่งอื่น ๆ opensslเช่นrsa dsa ec pkey pkcs8 pkcs12 req caจะใช้คำสั่งเหล่านั้น แต่ในทุกเวอร์ชันที่ฉันเคยเห็นรวมถึง 1.0.1e ที่สร้างขึ้นโดยตรงจากการencใช้ต้นทางต้นทาง-passหรือ-k -kfileเป็นเอกสาร (บนencmanpage)
dave_thompson_085

แล้วopenssl dgstคำสั่งล่ะ? คุณจะป้อนวลีรหัสผ่านสำหรับสิ่งนั้นที่บรรทัดรับคำสั่งได้อย่างไร
frakman1

4
btw -passinใช้เพื่อระบุรหัสผ่านสำหรับใบรับรองอินพุตและใช้-passoutสำหรับใบรับรองที่สร้างขึ้นใหม่
drmad

7

ฉันใช้-passinและ-passoutตั้งรหัสผ่านเป็นทั้งสองไฟล์ในตัวอย่าง:

openssl pkcs12 -in voip.p12 -out voip.pem -passin pass:123 -passout pass:321

ที่ไหน123และ321เป็นรหัสผ่าน


5

ในขณะนี้ Ubuntu 14.04 LTS มาพร้อมกับ openssl 1.0.1f-1ubuntu2.16

ในรุ่นนี้พารามิเตอร์ที่ใช้คือ -k

ตัวอย่าง:

openssl enc -aes-256-cbc -e -in some_file.unenc -out some_file.enc -k somepassword

1
ในตัวอย่างของคุณ -k เป็นตัวเลือกที่ใช้ได้กับคำสั่ง openssl 'enc' (ลองman enc) มันไม่ใช่ตัวเลือกทั่วไป หากคุณดูman opensslคุณจะเห็นภายใต้หัวข้อ 'ตัวเลือกวลีผ่าน' ตัวเลือกทั่วไปคืออะไร pass:password, env:var, file:pathname, fd:numberหรือstdinเป็นที่กล่าวถึงในการตอบสนองที่ก่อนหน้านี้
sibaz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.