Как создать файлы .pem для веб-сервера https


91

Я использую платформу 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, необходимые для экспресс-доставки?

Ответы:


201

Два файла, которые вам понадобятся, - это SSL-сертификат в формате PEM и закрытый ключ. Сертификаты и ключи в кодировке 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, который содержит всю информацию, которую вы выбираете для ввода в подсказках. ( Примечание: Common Name - это место, где вы захотите указать доменное имя, которое вы будете использовать для доступа к своему сайту. ) После того, как вы это сделаете, вы обычно отправляете этот CSR в доверенный центр сертификации, и после того, как они подтвердят по вашему запросу вы получите сертификат.

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

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

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


2
как насчет клиентского сертификата и ключа?
nkint 08

1
Этот пост завершен, запустите обе команды, которые он вставил, чтобы получить ключи + сертификат. Клиент не устанавливает доверие, только сервер.
Ninjaxor 01

@paul Не могли бы вы сказать мне, где генерируются эти ключ .pem и сертификат? Я имею ввиду какой каталог? Я использую Ubuntu 14
StormTrooper

2
Они будут писать в текущий рабочий каталог вашей оболочки.
Пауль Керер,

2
Обратите внимание, что созданный таким образом самозаверяющий сертификат - это версия 1, содержащая CN, но не SAN. «Начиная с версии 58, Chrome требует сертификатов SSL для использования SAN (альтернативное имя субъекта) вместо популярного общего имени (CN), поэтому поддержка CN была удалена». [Исправление Chrome 58+ [missing_subjectAltName] с помощью openssl при использовании самоподписанных сертификатов] ( alexanderzeitler.com/articles/… )
Чжиюн

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.