https Webサーバー用の.pemファイルを作成する方法


90

Node.jsのExpressフレームワークを使用してWebサーバーを作成しています。トランスポートがSSLに基づいていることを望みます。

https Webサーバーを作成するコードは次のとおりです。

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

質問:expressで必要なkey.pemおよびcert.pemを作成するにはどうすればよいですか?

回答:


200

必要な2つのファイルは、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を信頼できる認証局に送信し、検証が完了したら証明書を受け取るリクエスト。

証明書が信頼されていることを気にしない場合(通常、開発目的の場合)、自己署名証明書を作成できます。これを行うには、ほぼ同じ行を使用できますが、2つの追加パラメーターを渡します。

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

これにより、投稿したコードスニペットで使用できる証明書(10年間有効)とキーペアが提供されます。


2
クライアント証明書とキーはどうですか?
nkint 14

1
この投稿は完了です。キーと証明書を獲得するために貼り付けた2つのコマンドの両方を実行します。クライアントは信頼を確立せず、サーバーのみを確立します。
Ninjaxor

@paulこれらの.pemキーと証明書の生成先を教えてください。どのディレクトリですか?Ubuntu 14を使用しています
StormTrooper、2015年

2
シェルの現在の作業ディレクトリに書き込みます。
Paul Kehrer、

1
この方法で生成された自己署名証明書はバージョン1であり、CNを含みますが、SANは含みません。「バージョン58以降、Chromeでは一般的な共通名(CN)の代わりにSAN(Subject Alternative Name)を使用するためにSSL証明書が必要であるため、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.pemca-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

これらの証明書の使用方法の詳細とともに、この手順をここで見つけました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.