J'essaie d'héberger une application React que j'ai créée et testée localement à l'aide de la plateforme Facebook.
L'application cliente interagit avec une API que j'ai créée à l'aide de node.js, et avec laquelle je n'ai eu aucun problème à configurer une connexion sécurisée (avec un client node.js envoyant mon certificat SSL, pour test).
Cependant, je rencontre des difficultés en ce qui concerne l'utilisation de react pour envoyer mon certificat SSL au lieu d'un certificat auto-signé qui me fait rencontrer cette erreur en utilisant chrome et en essayant de accès à https://example.net:30 :
Votre connexion n'est pas privée (NET: ERR_CERT_AUTHORITY_INVALID)
La documentation ne m'a pas vraiment aidé:
Notez que le serveur utilisera un certificat auto-signé, de sorte que votre navigateur Web affichera presque définitivement un avertissement lors de l'accès à la page. https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/template/README.md#using-https-in-development
Comment puis-je utiliser mon propre certificat SSL (que j'utilise déjà sur une autre application de mon domaine et qui fonctionne comme un charme) au lieu de celui-ci auto-signé? Ai-je oublié quelque chose ?
Éjection create-react-app
n'est pas recommandé car vous ne pourrez pas le mettre à jour de manière transparente. De plus, vous pouvez facilement avoir un certificat SSL valide sans éjecter.
Vous devrez copier votre certificat dans node_modules/webpack-dev-server/ssl/server.pem
. L'inconvénient est que vous devez copier manuellement le fichier. Cependant, une façon de rendre cela transparent est d'ajouter un script postinstall
qui crée un lien symbolique. Voici un script que j'ai créé:
#!/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"
Votre package.json
devrait ressembler à:
"scripts": {
...
"postinstall": "sh ./scripts/link-certificate.sh"
}
Pour développer la réponse d'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",
Votre serveur qui sert des fichiers à partir de ce port doit être configuré pour utiliser votre certificat SSL. Je suppose que vous utilisez webpack-dev-server sur ce port (c'est ce que fait npm start
Dans create-react-app), et peut-être un serveur différent (Apache, nginx, etc.) sur le port 80?
Vous pouvez soit servir vos fichiers compilés à l'aide de votre serveur déjà configuré, soit configurer webpack-dev-server pour utiliser votre certificat SSL.
Pour ce faire, vous pouvez utiliser l'option --cert
De webpack-dev-server. Voir https://webpack.github.io/docs/webpack-dev-server.html
Si vous souhaitez le faire en utilisant npm start, qui appelle un script de démarrage personnalisé, vous devrez modifier ce script de démarrage. Vous devrez peut-être d'abord utiliser la commande eject
, qui vide tout le code de configuration dans votre référentiel afin que vous puissiez le modifier.
Voici le code source du script de démarrage: https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/scripts/start.js#L2
Je dois également noter que webpack-dev-server n'est pas destiné à être utilisé dans un environnement de production.
S'amuser!
C'est ce que j'ai fait:
bash <(wget -qO- https://Gist.github.com/w35l3y/5bb7fe8508d576472136f35428019177/raw/local-cert-generator.sh)
Ensuite, j'ai double-cliqué et importé: rootCA.pem
et server.pem
Ensuite, j'ai modifié package.json
:
"start": "HTTPS=true react-scripts start",
"prestart": "cp -f /path/to/server.pem ./node_modules/webpack-dev-server/ssl",
Sources très importantes:
J'ai pu faire fonctionner un certificat local sans modifier le webpack-dev-server
fichiers utilisant react-scripts
3.4.1
(techniquement ajouté dans 3.4.0
mais j'ai eu quelques problèmes, probablement sans rapport avec eux). J'ai ajouté ces deux variables d'environnement à mon .env.development
:
SSL_CRT_FILE=.cert/server.crt
SSL_KEY_FILE=.cert/server.key
Remarques:
.cert
est un dossier que j'ai créé à la racine de mon projet