Як створити .pem-файли для веб-сервера https


90

Я використовую фреймворк Express у Node.js для створення веб-сервера. Я хочу, щоб транспорт базувався на SSL.

Код для створення веб-сервера https наведений нижче.

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

Питання: Як створити key.pem та cert.pem, які вимагає express?

Відповіді:


200

Два потрібні файли - це кодований PEM сертифікат SSL та приватний ключ. Сертифікати та ключі, кодовані PEM, - це текст, кодований Base64, з розподільниками початку та кінця, які виглядають схожими -----BEGIN RSA PRIVATE KEY-----або подібними.

Щоб створити сертифікат SSL, спочатку потрібно створити приватний ключ і запит на підпис сертифіката, або CSR (який також містить ваш відкритий ключ). Ви можете зробити це різними способами, але ось як це зробити в OpenSSL.

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

Це призведе до того, що ви введете інтерактивне запит для створення 2048-розрядного приватного ключа RSA та CSR, який містить всю інформацію, яку ви вибрали для введення в підказках. ( Примітка: Загальне ім’я - це місце, де ви хочете вказати доменне ім’я, яке ви будете використовувати для доступу до свого веб-сайту. ) Після цього ви зазвичай подаєте цей CSR довіреному центру сертифікації та після перевірки. на ваш запит ви отримаєте сертифікат.

Якщо вам байдуже, чи надійний ваш сертифікат (як правило, це стосується цілей розробки), ви можете просто створити самопідписаний сертифікат. Для цього ми можемо використовувати майже той самий рядок, але ми передамо два додаткові параметри.

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

Це дасть вам сертифікат (дійсний протягом 10 років) і пару ключів, які ви можете використовувати у розміщеному фрагменті коду.


2
як щодо сертифіката та ключа клієнта?
nkint

1
Цей пост закінчений, запустіть обидві команди, які він вставив, щоб виграти ключі + сертифікат. Клієнт не встановлює довіри, лише сервер.
Ninjaxor

@paul Чи можете ви сказати мені, куди генеруються ці ключі .pem та сертифікат? Я маю на увазі який каталог? Я використовую Ubuntu 14
StormTrooper

2
Вони запишуть у поточний робочий каталог вашої оболонки.
Пол Керер,

1
Зверніть увагу, що таким чином створений самопідписаний сертифікат - це версія 1, що містить CN, але не SAN. "Починаючи з версії 58, Chrome вимагає сертифікатів SSL для використання SAN (Subject Alternative Name) замість популярного загального імені (CN), тому підтримка CN була видалена." [Виправлення Chrome 58+ [missing_subjectAltName] за допомогою openssl при використанні самопідписаних сертифікатів] ( alexanderzeitler.com/articles/… )
Zhiyong

12

Просто дотримуйтесь цієї процедури:

  1. створіть папку, де ви хочете зберігати свій ключ та сертифікат:

    mkdir conf


  1. перейдіть до цього каталогу:

    cd conf


  1. захопіть цей ca.cnfфайл, щоб використовувати його як ярлик конфігурації:

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


  1. створити новий центр сертифікації, використовуючи таку конфігурацію:

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


  1. тепер, коли у нас є центр сертифікації, ca-key.pemі ca-cert.pemдавайте створимо приватний ключ для сервера:

    openssl genrsa -out key.pem 4096


  1. захопіть цей server.cnfфайл, щоб використовувати його як ярлик конфігурації:

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


  1. згенеруйте запит на підпис сертифіката, використовуючи таку конфігурацію:

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


  1. підпишіть запит:

    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

Я знайшов цю процедуру тут , а також додаткову інформацію про те, як користуватися цими сертифікатами.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.