DN bilgileri için anahtarlar ve istemler için parola isteminden kaçının


90

Anahtar üretmek için aşağıdaki kodu kullanıyorum:

apt-get -qq -y install openssl;
mkdir -p /etc/apache2/ssl;
openssl genrsa -des3 -out server.key 1024;
openssl req -new -key server.key -out server.csr;
cp server.key server.key.org;
openssl rsa -in server.key.org -out server.key;
openssl x509 -req -days 12000 -in server.csr -signkey server.key -out server.crt;
mv server.crt  /etc/apache2/ssl/cert.pem;
mv server.key  /etc/apache2/ssl/cert.key;
rm -f server.key.orig;
rm -f server.csr

İki sorum var:

  1. Parola istemini nasıl atlayabilirim? Bunu yapmak benim için oldukça güvenli olur mu? (içinde olduğu gibi herkesin sertifikaya girebilmesi için düpedüz aptal olmamalıdır)

  2. Ülke ismi, kuruluş vb. İçin sorulmasını nasıl önleyebilirim?

Yanıtlar:


150

Düzenleme: Bu şu ana kadarki en popüler cevabım ve birkaç yıl oldu, bu yüzden bir ECDSA varyantı ekledim. ECDSA'yı kullanabiliyorsanız kullanmalısınız.


Tüm bu bilgileri komut satırında sağlayabilirsiniz.

Bir adım, kendinden imzalı şifresiz sertifika üretimi:

RSA Sürümü

openssl req \
    -new \
    -newkey rsa:4096 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

ECDSA versiyonu

openssl req \
    -new \
    -newkey ec \
    -pkeyopt ec_paramgen_curve:prime256v1 \
    -days 365 \
    -nodes \
    -x509 \
    -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com" \
    -keyout www.example.com.key \
    -out www.example.com.cert

Openssl alt komutlarının hepsinin kendi man sayfası var. Bakın man req.


Özellikle sorularınızı ele almak ve hangi seçeneklerin tam olarak geçerli olduğu konusunda daha açık olmak:

  1. -nodesBayrak sinyalleri böylece bir şifre gerekmez, anahtarı şifrelemek değil. -passout argBayrağı da kullanabilirsiniz . Bkz PASS PHRASE ARGUMENTSiçinde openssl(1)arg biçimlendirmek nasıl adam sayfası.

  2. -subjBayrağı kullanarak konuyu belirleyebilirsiniz (örnek yukarıdadır).


3
"-Subj" ile yazı okumak ancak benim için - yalnızca OPENSSL_CONF ayarlanmadığında kullanılır. IOW: OPENSSL_CONF ayarlanmışsa, OpenSSL oradan okumayı deneyecek ve "-subj" komut satırı argümanını görmezden gelecektir. Anlamanız biraz zaman aldı.
oberstet

oberstet: Evet, bu doğru.
bahamat

Konu anahtarını stdin'den geçmek mümkün müdür ? "-Key stdin", "-key fd: 1" ve "-key -" .. 'ı şanssızlıkla denedim.
oberstet,

1
@JeremyBaker: Hayır, bunun için iki adımlı bir işleme ihtiyacınız olacak. Sertifika yerine bir CSR oluşturmak için -x509ve işaretini -dayskaldırın ve normal CA imzalama yönteminizi kullanın.
bahamat

1
jww - ve o zaman geldi. Chrome v58 ile başlayarak, güvenli bir sayfa yüklemeye çalışırken ancak sertifikada eşleşen bir konuAltName bulunmuyorsa, "NET :: ERR_CERT_COMMON_NAME_INVALID" hata iletisine sahip bir gizlilik hatası sayfası gösterir. Gelişmiş düğmesine tıklanması, "... güvenlik sertifikasının [missing_subjectAltName]" olduğunu gösterir
Insomniac Yazılımı

11

Does not -passinseçenek sizin için hile yapmak?

İle file:pathnameforma Eğer bu dosya için izinleri 600 ile oldukça güvenli olabilir.


Seçeneği man sayfasındaki gördüm. Görünüşe göre sizden istemeden parolayı bu şekilde alabilirim. Teşekkürler!

Ve ile -passin 'pass:YOUR_PASSWORD'? - doc: openssl.org/docs/man1.0.2/apps/…
6:18

5

Kabul edilen cevabın birkaç küçük düzeltmeye ihtiyacı var. EC Hatları:

-newkey ec
-pkeyopt ec_paramgen_curve:prime256v1

olmalı:

 -newkey ec \
 -pkeyopt ec_paramgen_curve:prime256v1 \

MacOS'ta - demlemek yoluyla kurulan OpenSSL 1.0.2f, aşağıda verilen şekilde kabul edilen cevabı doğruladım

  • Mevcut Eliptik eğrileri listelemek için:

    $ openssl ecparam -list_curves
    
  • Bir anahtar dosyası oluşturmak için:

    $ openssl ecparam -name secp256k1 -out secp256k1.pem
    
  • Şifre isteminde bulunmadan sertifika üretmek için:

    openssl req \
        -new \
        -newkey ec:secp256k1.pem \
        -days 365 \
        -nodes \
        -x509 \
        -subj "/C=US/ST=FL/L=Ocala/O=Home/CN=example.com" \
        -keyout server.key \
        -out server.crt
    
  • Sertifikayı görüntülemek için:

    $ openssl x509 -noout -text -in server.crt
    

Bunun kabul edilen cevaptan farkı nedir?
Ramhound

1
Tek önemli fark, açıkça pem dosyasını oluşturma adımını listelememdir. Kabul edilen cevap iki karakterin eksik olması ve komutun yanlış olduğunu düşünmeme neden oldu.
Andrei Sura

1
Bu gerçeği söylemek isteyebilirsiniz. Kabul edilen cevap gerçekten eksikse ve karakterleri eksikse, farklılıkları ve cevabınızın önemli önemli bilgileri nasıl içerdiğini vurgulamak önemlidir.
Ramhound

3

Aşağıdaki komutu deneyin:

openssl genrsa -des3 -out user.key -passout pass:foo 1024

Atlama parçasıdır: -passout pass:foo.


2

@bahamat harika bir cevabı var. Maalesef openssl'nin bazı sürümleri, bir komutla ECDSA sertifikası oluşturmaya çalışırken hata veriyor. Hata gibi bir şey gider:

routines:EVP_PKEY_CTX_ctrl:invalid operation:pmeth_lib.c:404

Ben kullanıyordum openssl 1.0.1e-fipsüzerinde CentOS 7.

Sertifikanızı aşağıdaki 3 komutla oluşturmak işe yarayacak gibi görünüyor:

openssl ecparam -genkey -name prime256v1 -out key.pem
openssl req -new -key key.pem -out csr.pem -subj "/C=US/ST=Denial/L=Springfield/O=Dis/CN=www.example.com"
openssl req -x509 -days 365 -key key.pem -in csr.pem -out certificate.pem

Son satırın sonu gelmemeli server.crtmi?
20'de
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.