Jak tworzyć pliki .pem dla serwera WWW https

90

Używam frameworka Express w Node.js do tworzenia serwera WWW. Chcę, aby transport był oparty na protokole SSL.

Kod do utworzenia serwera internetowego https jest następujący.

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

Pytanie: Jak utworzyć key.pem i cert.pem wymagane przez express?

Jeffrey
źródło

Odpowiedzi:

201

Dwa potrzebne pliki to certyfikat SSL z kodowaniem PEM i klucz prywatny. Certyfikaty i klucze zakodowane w formacie PEM to tekst zakodowany w standardzie Base64 z ogranicznikami początku / końca, które wyglądają podobnie -----BEGIN RSA PRIVATE KEY-----lub podobnie.

Aby utworzyć certyfikat SSL, musisz najpierw wygenerować klucz prywatny i żądanie podpisania certyfikatu lub CSR (który zawiera również Twój klucz publiczny). Możesz to zrobić na wiele sposobów, ale oto jak w OpenSSL.

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

Spowoduje to wprowadzenie interaktywnego monitu w celu wygenerowania 2048-bitowego klucza prywatnego RSA i CSR zawierającego wszystkie informacje, które zdecydujesz się wprowadzić w monitach. ( Uwaga: nazwa zwykła to miejsce, w którym będziesz chciał umieścić nazwę domeny, której będziesz używać do uzyskiwania dostępu do swojej witryny ) . Gdy to zrobisz, zwykle prześlij ten CSR do zaufanego urzędu certyfikacji i po jego weryfikacji Twoja prośba otrzymałabyś certyfikat.

Jeśli nie zależy Ci na tym, aby Twój certyfikat był zaufany (zwykle ma to miejsce w celach programistycznych), możesz po prostu utworzyć certyfikat z podpisem własnym. Aby to zrobić, możemy użyć prawie tej samej linii, ale przekażemy dwa dodatkowe parametry.

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

W ten sposób otrzymasz certyfikat (ważny przez 10 lat) i parę kluczy, których możesz użyć w opublikowanym fragmencie kodu.

Paul Kehrer
źródło
2
a co z certyfikatem klienta i kluczem?
nkint
1
Ten post jest kompletny, uruchom oba dwa polecenia, które wkleił, aby wygrać klucze + cert. Klient nie ustanawia zaufania, tylko serwer.
Ninjaxor
@paul Czy możesz mi powiedzieć, gdzie są wygenerowane te klucze .pem i certyfikat? Mam na myśli który katalog? Używam Ubuntu 14
StormTrooper
2
Będą zapisywać w bieżącym katalogu roboczym twojej powłoki.
Paul Kehrer
1
Należy zauważyć, że wygenerowany w ten sposób certyfikat z podpisem własnym to wersja 1, zawierająca CN, ale bez sieci SAN. „Od wersji 58 Chrome wymaga certyfikatów SSL, aby używać SAN (alternatywna nazwa podmiotu) zamiast popularnej nazwy pospolitej (CN), dlatego obsługa CN została usunięta”. [Naprawianie Chrome 58+ [missing_subjectAltName] za pomocą openssl podczas korzystania z certyfikatów z podpisem własnym] ( alexanderzeitler.com/articles/… )
Zhiyong
11

Po prostu wykonaj tę procedurę:

  1. utwórz folder, w którym chcesz przechowywać swój klucz i certyfikat:

    mkdir conf


  1. przejdź do tego katalogu:

    cd conf


  1. pobierz ten ca.cnfplik, aby użyć go jako skrótu konfiguracyjnego:

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


  1. utwórz nowy urząd certyfikacji przy użyciu tej konfiguracji:

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


  1. teraz, gdy mamy nasz urząd certyfikacji ca-key.pemi ca-cert.pem, wygenerujmy klucz prywatny dla serwera:

    openssl genrsa -out key.pem 4096


  1. pobierz ten server.cnfplik, aby użyć go jako skrótu konfiguracyjnego:

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


  1. wygeneruj żądanie podpisania certyfikatu przy użyciu tej konfiguracji:

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


  1. podpisz wniosek:

    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

Znalazłem tę procedurę tutaj , wraz z dodatkowymi informacjami na temat korzystania z tych certyfikatów.

John Slegers
źródło