Localhostで使用する自己署名証明書の作成に関するさまざまな指示に従うことを試みます。指示のほとんどはIIS用のようですが、Nodejs/Expressを使用しようとしています。証明書はインストールされますが、信頼されていないため、どれも正しく機能しません。ここで私が試したのは失敗します:
誰かがこれを行うことができるワークフローを提供できますか? 証明書をインストールすることはできますが、chrome(v32)または_のいずれかで信頼される証明書を取得できませんIE(v10)。
編集:コメントでは、問題は信頼できる証明書ルートではないことが示唆されました。 IEを介して証明書をインストールしましたが、まだ信頼されていません。
上記の答えは部分的でした。私はこれを機能させるために多くの時間を費やしました、それは非常識です。私の将来に注意してください、あなたがする必要があるものはここにあります:
私はWindows 10でChrome 65を使用しています。Firefoxは正常に動作しています-ローカルホストをセキュリティ例外として確認するだけで動作します。 Chromeはしません:
ステップ1。バックエンドで、security
というフォルダーを作成します。内部で作業します。
ステップ2。次のコンテンツでreq.cnf
という名前のリクエスト設定ファイルを作成します(クレジットは次の場所に移動します: @ Anshul )
req.cnf:
[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
Prompt = no
[req_distinguished_name]
C = Country initials like US, RO, GE
ST = State
L = Location
O = Organization Name
OU = Organizational Unit
CN = www.localhost.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.localhost.com
DNS.2 = localhost.com
DNS.3 = localhost
このフィールドの説明は here です。
ステップ3。端末のセキュリティフォルダーに移動し、次のコマンドを入力します。
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.pem -config req.cnf -sha256
ステップ4。その後、security
フォルダーの外で、エクスプレスアプリで次のようにします(クレジットは@Diego Melloに送られます)
backend
/security
/server.js
server.js:
const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000
app.get('/', (req, res) => {
res.send("IT'S WORKING!")
})
const httpsOptions = {
key: fs.readFileSync('./security/cert.key'),
cert: fs.readFileSync('./security/cert.pem')
}
const server = https.createServer(httpsOptions, app)
.listen(port, () => {
console.log('server running at ' + port)
})
ステップ5サーバーnode server.js
を起動し、 https:// localhost:30 に移動します。
この時点で、サーバーのセットアップは完了です。ただし、ブラウザには警告メッセージが表示されます。
chrome/windows証明書ストアに、CAの信頼できる認証局として自己署名証明書を登録する必要があります。(chromeはこれもwindowsに保存します)
ステップ6。 ChromeでDev Toolsを開き、[セキュリティ]パネルに移動して、[証明書の表示]をクリックします。
ステップ7。 [詳細]パネルに移動し、[ファイルのコピー]をクリックして、証明書のエクスポートWizardが表示されたら、次のように[次へ]をクリックします。
ステップ8。 DERエンコードを終了し、[次へ]をクリックして、Browse
を選択し、デスクトップなどのアクセスしやすいフォルダーに配置して、証明書にlocalhost.cer, then click Save and then Finish.
という名前を付けます。デスクトップで証明書を確認できるはずです。
ステップ9。 URLボックスに挿入してchrome://settings/
を開きます。下のAdvanced / Advanced Options
をクリックしてから、下にスクロールしてManage Certificates
を見つけます。
ステップ10。 [信頼されたルート証明機関]パネルに移動し、[インポート]をクリックします。
手順8でエクスポートが完了したlocalhost.cer
証明書をインポートします。
ステップ11。 [参照]をクリックし、localhost.cer
を見つけ、デフォルト値のまま何回もクリックします。この警告が表示されるまで[はい]をクリックします。
ステップ12。すべてを閉じて、chromeを再起動します。次に、https://localhost:3000
に移動すると、次のように表示されます。
最短の方法 MacOSでテスト済みですが、他のOSでも同様に動作する可能性があります。
PEMを生成
> openssl req -x509 -newkey rsa:2048 -keyout keytmp.pem -out cert.pem -days 365
> openssl rsa -in keytmp.pem -out key.pem
エクスプレスサーバー
const express = require('express')
const app = express()
const https = require('https')
const fs = require('fs')
const port = 3000
app.get('/', (req, res) => {
res.send('WORKING!')
})
const httpsOptions = {
key: fs.readFileSync('./key.pem'),
cert: fs.readFileSync('./cert.pem')
}
const server = https.createServer(httpsOptions, app).listen(port, () => {
console.log('server running at ' + port)
})
https://localhost:3000
を開くと、安全ではないことがわかります。まだ!OpenSSLを試して証明書を生成できます。 this を見てください。
HTTPSをノードJSエクスプレスサーバーに追加するには、.keyファイルと.crtファイルが必要になります。これを生成したら、このコードを使用してHTTPSをサーバーに追加します。
var https = require('https');
var fs = require('fs');
var express = require('express');
var options = {
key: fs.readFileSync('/etc/Apache2/ssl/server.key'),
cert: fs.readFileSync('/etc/Apache2/ssl/server.crt'),
requestCert: false,
rejectUnauthorized: false
};
var app = express();
var server = https.createServer(options, app).listen(3000, function(){
console.log("server started at port 3000");
});
これは、ローカルマシンおよびこれを展開したサーバーで正常に機能しています。サーバーにあるものはgoDaddyから購入しましたが、localhostには自己署名証明書がありました。
ただし、すべてのブラウザーが接続が信頼されていないというエラーをスローしました。続行しますか? [続行]をクリックすると、正常に機能しました。
誰かが自己署名証明書でこのエラーを回避したことがあるなら、教えてください。
LocalhostのSSL証明書を生成する方法: link
openssl genrsa -des3 -out server.key 1024
ここにpasswordを入力する必要があり、次の手順で再入力する必要があります
openssl req -new -key server.key -out server.csr
「共通名」と入力された場合:localhost
openssl x509 -req -days 1024 -in server.csr -signkey server.key -out server.crt
ここに私のために働いているものがあります
窓の上
1)これを%WINDIR%\ System32\drivers\etc\hostsファイルに追加します:127.0.0.1 localdev.YOURSITE.net(ブラウザーに問題があるため) 「localhost」(クロスオリジンスクリプト用)
Windows VistaおよびWindows 7 VistaおよびWindows 7はユーザーアカウント制御(UAC)を使用するため、メモ帳は管理者として実行する必要があります。
[スタート]-> [すべてのプログラム]-> [アクセサリ]をクリックします
メモ帳を右クリックし、[管理者として実行]を選択します
[Windowsには許可が必要です] UACウィンドウで[続行]をクリックします。
メモ帳が開いたら、[ファイル]-> [開く]をクリックします。
ファイル名フィールドにC:\ Windows\System32\Drivers\etc\hostsと入力します
開くをクリックします
これを%WINDIR%\ System32\drivers\etc\hostsファイルに追加します:127.0.0.1 localdev.YOURSITE.net
保存する
ブラウザを閉じて再起動します
MacまたはLinuxの場合:
su
パーミッションで/ etc/hostsを開きます127.0.0.1 localdev.YOURSITE.net
を追加開発時には、localhostの代わりにlocaldev.YOURSITE.netを使用するため、IDEで実行/デバッグ構成を使用している場合は、必ず更新してください。
Cookiemを作成するときは、「。YOURSITE.net」をcookiedomainとして(先頭にドットを付けて)使用すると、すべてのサブドメインで機能します。
2)そのlocaldev.urlを使用して証明書を作成します
ヒント:Windowsで証明書の生成に問題がある場合は、代わりにVirtualBoxまたはVmwareマシンを使用してください。
3)http://www.charlesproxy.com/documentation/using-charles/sslで説明されているように証明書をインポートします-certificates /
OSX/Chromeを使用している場合は、ここで説明するように、自己署名SSL証明書をシステムキーチェーンに追加できます。 http://www.robpeck.com/2010/10/google-chrome-mac-os -x-and-self-signed-ssl-certificates
それは手動のプロセスですが、ようやく機能するようになりました。共通名(CN)が「localhost」(ポートなし)に設定されていることを確認し、証明書を追加した後、証明書のすべての信頼オプションが「常に信頼」に設定されていることを確認してください。また、「ログイン」キーチェーンではなく、「システム」キーチェーンに追加してください。
ノードを使用している場合、ノードでそれらを生成してみませんか?このモジュールはかなり充実しているようです:
その場で生成しないことに注意してください。何らかのビルドスクリプトを使用して生成し、一貫した証明書とキーを取得します。それ以外の場合は、毎回新しく生成された自己署名証明書を認証する必要があります。
windowsでは、MMC(start> run> mmc)を使用してiis開発証明書を信頼してから、証明書スナップインを追加し、「ローカルコンピューター」を選択してデフォルトを受け入れます。証明書のスナップショットが追加されたら、ローカルコンピューターの証明書ツリーを展開して、[個人]の下にあるlocalhost証明書を選択し、右クリック> [すべてのタスク]> [エクスポート]をクリックします。エクスポートウィザードですべてのデフォルトを受け入れます。
そのファイルを保存したら、信頼できる証明書を展開し、エクスポートしたばかりの証明書のインポートを開始します。 https://localhost
はchromeで信頼され、セキュリティ警告はありません。
私はこのガイドを使用しました 解像度#2 MSDNブログから、操作者はMMCを使用する必要があるという彼の質問へのリンクも共有しましたが、これはうまくいきました。 解像度#2
これにはさらに多くの側面があります。
自己署名の有無にかかわらず、証明書を使用してTLSを実現できます(SSLを使い続ける人もいます)。
自己署名証明書の緑色のバーを表示するには、認証局(CA)になる必要もあります。この側面は、私のローカル開発セットアップで緑色のバーを達成するための旅で見つけたほとんどのリソースにはありません。 CAになることは、証明書を作成するのと同じくらい簡単です。
このリソースは、CA証明書とサーバー証明書の両方の作成をカバーし、localhost Chrome、Firefox、およびEdgeに緑色のバーを表示するように設定しました。 https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58 =
注:Chromeでは、CA証明書を信頼できる機関に追加する必要があります。
移動先:chrome://flags/
有効:ローカルホストからロードされたリソースに対して無効な証明書を許可します。
緑色のセキュリティはありませんが、クロムでは https:// localhost が常に許可されています。
Mkcert @FiloSottileを使用すると、このプロセスが非常に簡単になります。
mkcert -install
はローカルCAを作成しますmkcert localhost 127.0.0.1 ::1
は、現在のディレクトリにローカルホストの信頼できる証明書を作成しますexport NODE_EXTRA_CA_CERTS="$(mkcert -CAROOT)/rootCA.pem"
基本的なノード設定:
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const server = https.createServer({
key: fs.readFileSync('/XXX/localhost+2-key.pem'), // where's me key?
cert: fs.readFileSync('/XXX/localhost+2.pem'), // where's me cert?
requestCert: false,
rejectUnauthorized: false,
}, app).listen(10443); // get creative
投稿された回答の一部には、この問題を克服するのに非常に役立つ部分があります。ただし、minimumのステップ数に興味があり、理想的には、OpenSSLを回避します(Windows 10)。
そのため、回答の重要な部分(クレジット:@ TroyWorks )は、HOSTSファイルを編集して架空のサーバーを作成し、127.0.0.1にマッピングする必要があることです。これは、ローカル開発を行うことを想定しています。
私の場合、SS証明書を使用してNodeJSのWebSocketを保護し、そのソケットは(ブラウザー経由ではなく)プログラムで接続されていました。だから、私にとっては、警告やエラーなしで証明書を受け入れることが重要であり、重要な部分は、適切なCNで証明書を作成することでした(そしてもちろん、答えに記載されているように、信頼できる機関に証明書を受け入れます) 。 IISを使用して自己署名証明書を作成しても適切なCNが作成されないため、Powershellを使用して次のsimpleコマンドを発見しました:
New-SelfSignedCertificate -DnsName "gandalf.dummy.dev" -FriendlyName "gandalf" -CertStoreLocation "cert:\LocalMachine\My"
これはPS管理コンソールで実行する必要がありますが、動作するだけで、証明書をLocalMachine証明書ストアの「個人」セクションに配置します。次のコマンドを実行して、作成されたことを確認できます。
ls cert:\LocalMachine\My
信頼するには、これをコピーして、証明書マネージャーを使用して「信頼されたルート証明機関」に貼り付けます(現在のユーザーではなく、ローカルマシンの証明書を確認してください!)。
IISでこの証明書にバインドすると、 https://gandalf.dummy.dev/ をヒットして、警告なしで安全な接続を取得できるはずです。
NodeJSでこれを使用する最後の部分は、上記および他のSOの回答で説明されているため、Windowsでのみ追加します。証明書と秘密キーを組み合わせたpfxファイルで作業する方が簡単です。証明書マネージャーからpfxを簡単にエクスポートできますが、NodeJSでの使用方法に影響します。 「https」モジュールを使用してサーバーをインスタンス化する場合、(「key」および「cert」の代わりに)使用するオプションは「pfx」および「passphrase」になります。
var https = require('https');
var options = {
pfx: fs.readFileSync('mypfxfile'),
passphrase: 'foo'
};
var server = https.createServer(options);