Openssl'deki -nodes argümanının amacı nedir?


103

-nodesOpenssl'deki argümanın amacı nedir ?


2
Stack Overflow, programlama ve geliştirme soruları için bir sitedir. Bu soru, programlama veya geliştirme ile ilgili olmadığı için konu dışı gibi görünüyor. Burada , Yardım Merkezinde hangi konular hakkında soru sorabilirim konusuna bakın . Belki Süper Kullanıcı veya Unix ve Linux Yığın Değişimi sormak için daha iyi bir yer olabilir.
jww

20
@jww Katılmıyorum, openssl düşük seviyeli bir araç takımı ve geliştiricilerin her zaman bununla uğraşması gerekiyor. Satır oldukça bulanık ve burada opensl sorularına izin vermemek büyük bir kayıp olur çünkü C lib yerine bir CLI olur.
gtd

@gtd - Bunları işaretlediğimde sık sık karşılaştığım bir şikayet. Ayrıca, Dev Ops ile ilgili sorularımı nereye gönderebilirim? Konusuna bakın. . (Ama sanırım bu konuda bir hata yaptım - soru 2011'den geliyor ve o zamanlar konu ile ilgili olduğuna inanıyorum. Politika değişikliği için cezalandırmayı sevmiyorum).
jww

2
@gtd - re: "openssl düşük seviyeli bir araç setidir ve geliştiriciler bununla her zaman uğraşmak zorundadır." - Süper Kullanıcı veya Unix ve Linux Yığın Değişimi bunun içindir. "... opensl sorularına izin vermemek büyük bir kayıp olur ..." - openssl C programlama soruları burada her zaman memnuniyetle karşılanır. Stack Overflow bir programlama ve geliştirme sitesidir çünkü programlama dışı soruların kaybı kaçırılmayacaktır. Bir komutu nasıl kullanacağınızı bilmediğinizde gidebileceğiniz başka siteler var.
JWW

Bağlantı için teşekkürler, bunun çok önemli bir konu olduğunu düşündüğüm için cevabımı oraya göndereceğim.
gtd

Yanıtlar:


124

Seçenek -nodes, İngilizce "düğümler" kelimesi değil, "DES yok" dur. Argüman olarak verildiğinde, OpenSSL'nin bir PKCS # 12 dosyasındaki özel anahtarı şifrelemeyeceği anlamına gelir .

Özel anahtarı şifrelemek için atlayabilirsiniz -nodesve anahtarınız 3DES-CBC ile şifrelenecektir. Anahtarı şifrelemek için OpenSSL sizden bir parola ister ve bu parolayı anahtar türetme işlevi EVP_BytesToKey'i kullanarak bir şifreleme anahtarı oluşturmak için kullanır .

OpenSSL'deki ve derlenen seçeneklerin sürümüne bağlı olarak, olabilir yerine bu seçenekleri sağlayabilmelidir -nodes:

-des          encrypt private keys with DES
-des3         encrypt private keys with triple DES (default)
-idea         encrypt private keys with idea
-seed         encrypt private keys with seed
-aes128, -aes192, -aes256
              encrypt PEM output with cbc aes
-camellia128, -camellia192, -camellia256
              encrypt PEM output with cbc camellia

Nihayetinde kütüphane seviyesinde OpenSSL, seçtiğiniz şifreleme algoritması (veya yokluğu) ile PEM_write_bio_PrivateKey fonksiyonunu çağırır .


1
Şifreleme derken, bir şifre ile mi demek istiyorsunuz?
Flimm

4
@Flimm: Bir şifre ile korunmaktadır, evet. Parola, bir anahtar türetme algoritması kullanarak bir şifreleme anahtarı oluşturur ve şifreleme, parolayla değil anahtarla yapılır. Şifrelenmiş anahtarı kullanmanın tek yolu, önce şifresini çözmektir; bunun için, aynı anahtarı oluşturmak için şifrelenmiş olduğu şifreyi bilmeniz gerekir.
2013

özel anahtar dosyamı neden şifrelemeliyim? bunlar kimseye yayınlanmadı, dolayısıyla adı. Yoksa yanılıyor muyum?
phil294

1
@Blauhirn: Özel anahtar dosyanızı, herhangi bir dosyayı şifrelemenizle aynı nedenle şifrelersiniz: bir kopyasını alan birinin onu okuyabilmesini veya kullanmasını istemezsiniz. Özel anahtarı şifrelemeniz gerekip gerekmediği, anahtarın önemine ve tehdit modelinize bağlıdır.
2018

12

edit: nginx v1.7.3, bağlamın şifrelenmiş özel anahtarındaki her bir parolayı deneyen belirli bir dosyadan parolaları okuyan bir ssl_password_file yönergesi ekledi

Bireysel doğru olduğunu -nodesOpenSSL şifrelenmemiş yaratacak bağımsız değişken aracı private.key ; aksi takdirde, şifrelenmiş özel.anahtar oluşturmak için bir parola istemi olacaktır . bkz. req , pkcs12 , CA.pl

ancak (programcılar için) amacın şudur:

  • HTTP sunucuları (ör. Apache , Nginx ) şifrelenmiş-özel.aneli parola olmadan okuyamaz →
    • Seçenek A - HTTP sunucusu her başladığında, şifrelenmiş özel anahtar için parola sağlamalıdır.
    • Seçenek B - ssl_password_file file.keys;içinde http { }veya server { }bağlamı belirtin . [ ref ]
    • Seçenek C - şifreleme olmadan private.key-nodes oluşturmak için kullanın

kullanışlı: özel.key'i kilitle

  • { ssl-cert grubuna HTTP sunucusu ekleyin }
  • sudo chown root:ssl-cert private.key- ch ange kendi içinde er private.key için kök kullanıcı, ssl-sertifika grubunda
  • sudo chmod 640 private.key- private.key erişim izinlerini R / W sahibi, R grubu olarak değiştirin
  • artık HTTP sunucusu Unencrypted private.key'i başlatabilmeli ve okuyabilmelidir.

Seçenek A

daha güçlü güvenlik, ancak sunucu yeniden başladığında, şifrelenmiş özel anahtar için parolayı manuel olarak yazmak zorunda kalır.

Seçenek B

orta güvenlik ve muhtemelen klima arasında iyi bir denge

Seçenek C

Henüz şifresiz istenirse DEĞİL zayıf güvenlik, private.key parola


mükemmel açıklama
rizidoro

1
Nginx , 1.7.3 sürümünden beri şifrelenmiş özel anahtarları okuyabilir, bkz: nginx.org/en/docs/http/…
5lava

2
Nginx ve sürümlerini tartışmaya dahil etmenin amacı nedir? Ayrıca, (B) ve (C) eşdeğer güvenlik (yani dosya sistemi ACL'leri) sunar. Sizin tarif edilmektedir sorundur Katılımsız Anahtar Depolama Sorunu ve çözüm olmadan bir sorun. Gutmann'ın Mühendislik Güvenliği kitabına bakın.
jww

@jww soru " amaç nedir ..." diye soruyor . Sorunun bağlamını (programcılar için QnA) dikkate aldım, "ancak, amacın (programcılar için) çünkü:" olduğunu düşünüyorum. Özellikle güvenlik konusunda .. olabilir için bir tartışma olmak security.stackexchange.com
Jake Berger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.