Https web sunucusu için .pem dosyaları nasıl oluşturulur


90

Bir web sunucusu oluşturmak için Node.js'deki Express çerçevesini kullanıyorum. Taşımanın SSL'ye dayalı olmasını istiyorum.

Https web sunucusunu oluşturacak kod aşağıdaki gibidir.

var app = express.createServer({
  key: fs.readFileSync('./conf/key.pem'),
  cert: fs.readFileSync('./conf/cert.pem')
});
module.exports = app;

Soru: express'in gerektirdiği key.pem ve cert.pem nasıl oluşturulur?

Yanıtlar:


201

İhtiyacınız olan iki dosya, PEM şifreli SSL sertifikası ve özel anahtardır. PEM kodlu sertifikalar ve anahtarlar, -----BEGIN RSA PRIVATE KEY-----benzer veya benzer görünen başlangıç ​​/ bitiş sınırlayıcıları olan Base64 kodlu metindir .

Bir SSL sertifikası oluşturmak için önce bir özel anahtar ve bir sertifika imzalama isteği veya CSR (genel anahtarınızı da içerir) oluşturmanız gerekir. Bunu çeşitli şekillerde yapabilirsiniz, ancak OpenSSL'de nasıl yapılacağı aşağıda açıklanmıştır.

openssl req -newkey rsa:2048 -new -nodes -keyout key.pem -out csr.pem

Bu, 2048 bitlik bir RSA özel anahtarı ve bilgi istemlerinde girmeyi seçtiğiniz tüm bilgileri içeren bir CSR oluşturmak için etkileşimli bir bilgi istemi girmenize neden olacaktır. ( Not: Ortak Ad, sitenize erişmek için kullanacağınız etki alanı adını koymak isteyeceğiniz yerdir. ) Bunu yaptıktan sonra, normalde bu CSR'yi güvenilir bir sertifika yetkilisine gönderirsiniz ve onlar doğrulandıktan sonra isteğiniz bir sertifika alacaksınız.

Sertifikanızın güvenilir olması umurunuzda değilse (genellikle geliştirme amaçları içindir), kendinden imzalı bir sertifika oluşturabilirsiniz. Bunu yapmak için neredeyse aynı satırı kullanabiliriz, ancak iki ekstra parametre aktaracağız.

openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem

Bu size gönderdiğiniz kod parçacığında kullanabileceğiniz bir sertifika (10 yıl geçerli) ve anahtar çifti verecektir.


2
istemci sertifikası ve anahtarı için ne dersiniz?
nkint

1
Bu gönderi tamamlandı, anahtarları + sertifikayı kazanmak için yapıştırdığı iki komutu da çalıştırın. İstemci güven oluşturmaz, yalnızca sunucu oluşturur.
Ninjaxor

@paul Bu .pem anahtarlarının ve sertifikalarının nerede üretildiğini söyleyebilir misiniz? Yani hangi dizin? Ubuntu 14
StormTrooper

2
Kabuğunuzun mevcut çalışma dizinine yazacaklar.
Paul Kehrer

1
Bu şekilde oluşturulan kendinden imzalı sertifikanın CN içeren ancak SAN içermeyen sürüm 1 olduğunu unutmayın. "Sürüm 58'den beri Chrome, popüler Ortak Ad (CN) yerine SAN (Konu Alternatif Adı) kullanmak için SSL sertifikalarına ihtiyaç duyuyor, bu nedenle CN desteği kaldırıldı." [Kendinden imzalı sertifikalar kullanılırken Chrome 58+ [missing_subjectAltName] 'ı openssl ile düzeltiyor] ( alexanderzeitler.com/articles/… )
Zhiyong

11

Sadece şu prosedürü izleyin:

  1. anahtarınızı ve sertifikanızı saklamak istediğiniz klasörü oluşturun:

    mkdir conf


  1. o dizine gidin:

    cd conf


  1. ca.cnfyapılandırma kısayolu olarak kullanmak için bu dosyayı alın:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf


  1. bu yapılandırmayı kullanarak yeni bir sertifika yetkilisi oluşturun:

    openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem


  1. şimdi bizim sertifika yetkisine sahip olduğunu ca-key.pemve ca-cert.pem, en sunucu için özel anahtar oluşturmak atalım:

    openssl genrsa -out key.pem 4096


  1. server.cnfyapılandırma kısayolu olarak kullanmak için bu dosyayı alın:

    wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf


  1. bu yapılandırmayı kullanarak sertifika imzalama isteği oluşturun:

    openssl req -new -config server.cnf -key key.pem -out csr.pem


  1. isteği imzala:

    openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem

Bu sertifikaların nasıl kullanılacağına dair daha fazla bilgi ile birlikte bu prosedürü burada buldum .

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.