Komut satırından bir parola kullanarak bir openSSL anahtarı nasıl oluşturulur?


107

İlk olarak - parola vermezsem ne olur? Bir tür sözde rastgele ifade mi kullanılıyor? Sıradan bilgisayar korsanlarını uzak tutmak için "yeterince iyi" bir şey arıyorum.

İkinci olarak - komut satırında parolayı sağlayarak komut satırından nasıl anahtar çifti oluşturabilirim?


Sonunda bu komutları kullanarak, genellikle güvenli olmadığı düşünülen exec () kullanarak, PassPhrase'i bir dosyada vermek daha iyi bir şekilde çalıştırdım. Bu riski kabul edebilirim, çünkü PHP'nin sadece benim PC'imde çalıştırılacağından (Windows çalıştıran ve bir PS komutu olmayan) eminim.

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 2048
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

@Caf'a çok teşekkürler, kimi olmasa bu mümkün olamazdı.

Tek bir pişmanlık - ne kadar Google'da olursam olayım, hiç kimse openssl_pkey_new()Windows'ta Xampp ile çalışmıyor gibi görünüyor (bu, bir anahtar çifti oluşturmanın doğru yoludur)


4
neden openssl_pkey_new()... bir anahtar çifti oluşturmanın "uygun" yolu?
Jake Berger

Windows'da (normalde) yok psama Vista'dan beri varwmic process get commandline
dave_thompson_085

Yanıtlar:


210

Bir parola kullanmazsanız, özel anahtar herhangi bir simetrik şifre ile şifrelenmez - tamamen korumasız olarak çıkar.

Komut satırında şifreyi aşağıdaki gibi bir çağrı kullanarak sağlayan bir anahtar çifti oluşturabilirsiniz (bu durumda şifre foobar:

openssl genrsa -aes128 -passout pass:foobar 3072

Ancak, komut satırı argümanları genellikle tüm süreçler tarafından görülebildiğinden, bu parolanın o sırada makinede çalışan başka herhangi bir işlem tarafından yakalanabileceğini unutmayın.

Daha iyi bir alternatif, parolayı dosya izinleriyle korunan geçici bir dosyaya yazmak ve şunu belirtmektir:

openssl genrsa -aes128 -passout file:passphrase.txt 3072

Veya parolayı standart girişte sağlayın:

openssl genrsa -aes128 -passout stdin 3072

Ayrıca file:seçenekle adlandırılmış bir kanal veya bir dosya tanımlayıcı da kullanabilirsiniz.


Daha sonra eşleşen genel anahtarı elde etmek için , özel anahtarı şifrelemek için kullanılan parametreyle openssl rsaaynı parolayı sağlamanız gerekir -passin:

openssl rsa -passin file:passphrase.txt -pubout

(Bu, standart girişte şifrelenmiş özel anahtarı beklemektedir - bunun yerine kullanarak bir dosyadan okuyabilirsiniz -in <file>).


Parola ile şifrelenmiş özel anahtar çifti ile dosyalarda 3072 bitlik özel ve genel anahtar çifti oluşturma örneği foobar:

openssl genrsa -aes128 -passout pass:foobar -out privkey.pem 3072
openssl rsa -in privkey.pem -passin pass:foobar -pubout -out privkey.pub

+1 Harika, işe yarıyor! Teşekkürler, bir gence biraz daha yardım edebilirseniz, o zaman cevabı alırsınız ... Neden bu işe yaramıyor? openssl rsa -in privkey.pem -pubout -passout pass: foobar -out pubkey.pem
Mawg, Monica'yı yeniden etkinleştir diyor

veya başka bir deyişle - sizin komutunuzdan genel anahtara nasıl (benimkinden biraz farklıydı). Sadece eşleşen bir çifte ihtiyacım var. Bu sadece "yeterince iyi" güvenliktir.
Mawg, Monica'nın

4
@Mawg: opensslKomutunuz, sağlanan özel anahtara karşılık gelen genel anahtarı çıkarıyor - genel anahtarlar şifrelenmez (bunlar gizli değildir), bu nedenle kullanmak -passoutanlamsızdır. -passinİlk adımda özel anahtarı şifrelemek için kullanılan parolayı sağlamak için muhtemelen orayı kullanmak isteyeceksiniz . Ayrıca cevaba bir şeyler ekledim.
kafe

@caf, harika geribildirim için teşekkürler (tekrar +1). Ancak, görünüşe göre OpenSSL'yi kullanmama izin verilmeyecek kadar aptalım. Anahtarı bir dosyada istiyorum ve nedense openssl genrsa 2048 -aes128 -passout pass:foobar -out privkey.pembunu yapmıyor. Lütfen bana iki komut verebilir misiniz - biri özel anahtarı bir dosyaya, bir saniyede genel anahtarı (ayrıca bir dosyada) oluşturmak için? Rahatsız ettiğim için üzgünüm, ama bununla
uğraşıyorum

3
@Mawg: eğer OpenSSL böyle değil -outparam sonra gelir 2048- komut satırından (Ben gibi benim cevap güncelledik) son şey olması gerekiyor ki gerçekten. Son örneğe bakın, bence istediğiniz bu. AES-128'e gelince , bu konularda güvendiğim biri AES-256 üzerinden tavsiye ediyor.
caf

9

genrsaile değiştirildigenpkey ve bir terminalde manuel olarak çalıştırıldığında bir parola sorulacak:

openssl genpkey -aes-256-cbc -algorithm RSA -out /etc/ssl/private/key.pem -pkeyopt rsa_keygen_bits:4096

Ancak bir komut dosyasından çalıştırıldığında, komut bir parola istemez, bu nedenle bir işlem shellkomut dosyasında bir işlevi kullanırken parolanın görüntülenmesini önlemek için :

get_passwd() {
    local passwd=
    echo -ne "Enter passwd for private key: ? "; read -s passwd
    openssl genpkey -aes-256-cbc -pass pass:$passwd -algorithm RSA -out $PRIV_KEY -pkeyopt rsa_keygen_bits:$PRIV_KEYSIZE
}
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.