Facebookのボイラープレートを使用してローカルで作成およびテストした反応アプリをホストしようとしています。
クライアントアプリは、node.jsを使用して作成したAPIと対話し、安全な接続をセットアップする際に問題はありませんでした(node.jsクライアントがテスト用にSSL証明書を送信する)。
しかし、自己署名証明書ではなく、reactを使用してSSL証明書を送信する際に、chromeを使用してこのエラーが発生し、 https://example.net:30 へのアクセス:
接続はプライベートではありません(NET:ERR_CERT_AUTHORITY_INVALID)
ドキュメントは私を完全には助けませんでした:
サーバーは自己署名証明書を使用するため、Webブラウザーはページにアクセスすると警告をほぼ確実に表示します。 https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#using-https-in-development
この自己署名証明書の代わりに、自分のSSL証明書(ドメインの別のアプリですでに使用していて、チャームのように機能する)を使用するにはどうすればよいですか?私は何か見落としてますか ?
create-react-app
のイジェクトは、シームレスにアップグレードすることができないためお勧めできません。さらに、イジェクトせずに簡単に有効なSSL証明書を取得できます。
証明書をnode_modules/webpack-dev-server/ssl/server.pem
にコピーする必要があります。欠点は、ファイルを手動でコピーする必要があることです。ただし、これをシームレスにする1つの方法は、シンボリックリンクを作成するpostinstall
スクリプトを追加することです。これが script です:
#!/bin/bash
# With create-react-app, a self signed (therefore invalid) certificate is generated.
# 1. Create some folder in the root of your project
# 2. Copy your valid development certificate to this folder
# 3. Copy this file to the same folder
# 4. In you package.json, under `scripts`, add `postinstall` script that runs this file.
# Every time a user runs npm install this script will make sure to copy the certificate to the
# correct location
TARGET_LOCATION="./node_modules/webpack-dev-server/ssl/server.pem"
SOURCE_LOCATION=$(pwd)/$(dirname "./local-certificate/server.pem")/server.pem
echo Linking ${TARGET_LOCATION} TO ${SOURCE_LOCATION}
rm -f ${TARGET_LOCATION} || true
ln -s ${SOURCE_LOCATION} ${TARGET_LOCATION}
chmod 400 ${TARGET_LOCATION} # after 30 days create-react-app tries to generate a new certificate and overwrites the existing one.
echo "Created server.pem symlink"
package.json
は次のようになります。
"scripts": {
...
"postinstall": "sh ./scripts/link-certificate.sh"
}
Eladの答えを拡張するには:
/cert/server.pem
)"start": "HTTPS=true react-scripts start",
"prestart": "rm ./node_modules/webpack-dev-server/ssl/server.pem && cp -f ./cert/server.pem ./node_modules/webpack-dev-server/ssl",
そのポートからファイルを提供するサーバーは、SSL証明書を使用するように構成する必要があります。私はあなたがそのポートでwebpack-dev-server(それがnpm start
がcreate-react-appで行うことです)を使用していて、おそらくポート80で別のサーバー(Apache、nginxなど)を使用していると思いますか?
既に設定されているサーバーを使用してコンパイル済みファイルを提供するか、SSL証明書を使用するようにwebpack-dev-serverを設定できます。
これを行うには、webpack-dev-serverの--cert
オプションを使用できます。 https://webpack.github.io/docs/webpack-dev-server.html を参照してください
カスタム開始スクリプトを呼び出すnpm startを使用してこれを行う場合は、その開始スクリプトを編集する必要があります。最初にeject
コマンドを使用する必要がある場合があります。これにより、すべての構成コードがリポジトリにダンプされ、変更できるようになります。
開始スクリプトのソースコードを以下に示します。 https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/scripts/start.js#L2
また、webpack-dev-serverは本番環境で使用することを意図していないことにも注意してください。
楽しんで!
これは私がやったことです:
bash <(wget -qO- https://Gist.github.com/w35l3y/5bb7fe8508d576472136f35428019177/raw/local-cert-generator.sh)
次に、ダブルクリックしてインポートしました:rootCA.pem
およびserver.pem
次に、package.json
:
"start": "HTTPS=true react-scripts start",
"prestart": "cp -f /path/to/server.pem ./node_modules/webpack-dev-server/ssl",
非常に重要な情報源:
ローカル証明書を機能させることができましたなしwebpack-dev-server
react-scripts
を使用して3.4.1
ファイルを変更しました(3.4.0
に技術的に追加されましたが、いくつかありました—おそらく無関係-問題)。これら2つの環境変数を.env.development
に追加しました。
SSL_CRT_FILE=.cert/server.crt
SSL_KEY_FILE=.cert/server.key
ノート:
.cert
は、プロジェクトのルートに作成したフォルダーです