Permalänk

Backend i Node JS = HTTPS

Hej

Har skrivit en Node backend server med HTTPS enligt: Express.js HTTPS server

/* ==================================== Main server file ==================================== Basic Server module */ const express = require('express'); const https = require('https'); const fs = require('fs'); let cors = require('cors'); const app = express(); app.use(express.json()); app.use(express.static('public')); app.use(cors()); // Import usefull files const textFile = require('./TextFile/ReadTextFile'); // The server information const port = 3001; // HTTPSercure server const hskey = fs.readFileSync('fredrikDev-key.pem'); const hscert = fs.readFileSync('fredrikDev-cert.pem') const serverOptions = { key: hskey, cert: hscert }; var httpsServer = https.createServer(serverOptions, app); httpsServer.listen(port, () => console.log(`HTTPSserver is listening on port ${port}!`)); // Run default app.get('/GetText', (req, res) => { console.log('========================= ReadTxtFile =========================================='); // Collecting all textFiles into a object const sendTextOStr = { textMain: textFile.welcome(), services: textFile.services(), aboutMe: '',//textFile.abouteMe(), } /* const getSendingType = req.params.pageText; console.log("getSendingType", getSendingType) */ res.status(200).send(sendTextOStr//[getSendingType] ); })

När jag gör Axios anrop från min Frontend app måste jag godkänna certifikatet. Jag vill få upp sidan där jag kan godkänna innan appen kan hämta min data men nu är det lite krångligt.

Nu behöver jag öppna min backends url länk för att få upp sidan och godkänna certifikatet. Krångligt för den som inte är datorvan.
Det måste finna ett enklare sätt att göra t.ex. som ovan?

Mvh Fredrik

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Hej

Har skrivit en Node backend server med HTTPS enligt: Express.js HTTPS server

/* ==================================== Main server file ==================================== Basic Server module */ const express = require('express'); const https = require('https'); const fs = require('fs'); let cors = require('cors'); const app = express(); app.use(express.json()); app.use(express.static('public')); app.use(cors()); // Import usefull files const textFile = require('./TextFile/ReadTextFile'); // The server information const port = 3001; // HTTPSercure server const hskey = fs.readFileSync('fredrikDev-key.pem'); const hscert = fs.readFileSync('fredrikDev-cert.pem') const serverOptions = { key: hskey, cert: hscert }; var httpsServer = https.createServer(serverOptions, app); httpsServer.listen(port, () => console.log(`HTTPSserver is listening on port ${port}!`)); // Run default app.get('/GetText', (req, res) => { console.log('========================= ReadTxtFile =========================================='); // Collecting all textFiles into a object const sendTextOStr = { textMain: textFile.welcome(), services: textFile.services(), aboutMe: '',//textFile.abouteMe(), } /* const getSendingType = req.params.pageText; console.log("getSendingType", getSendingType) */ res.status(200).send(sendTextOStr//[getSendingType] ); })

När jag gör Axios anrop från min Frontend app måste jag godkänna certifikatet. Jag vill få upp sidan där jag kan godkänna innan appen kan hämta min data men nu är det lite krångligt.

Nu behöver jag öppna min backends url länk för att få upp sidan och godkänna certifikatet. Krångligt för den som inte är datorvan.
Det måste finna ett enklare sätt att göra t.ex. som ovan?

Mvh Fredrik

Om användaren "måste godkänna certifikatet" så har du redan förlorat om det ska fungera för någon som inte är datorvan (ännu mer så om det ska gå att bygga en säker lösning, för den genomsnittliga användaren kommer inte hålla reda på om det är rätt eller fel cert som de godkänner).
Det beteendet har ju dock inget med Express eller Node att göra utan med själva certifikatet.

Skaffa ett "riktigt" certifikat, t.ex. med LetsEncrypt. Det är den rimligaste lösningen.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Tangentbordskonnässör
Skrivet av evil penguin:

Skaffa ett "riktigt" certifikat, t.ex. med LetsEncrypt. Det är den rimligaste lösningen.

+1 på detta.

Om du hade haft ett giltigt cert så behöver man inte godkänna det. Du behöver ju aldrig godkänna några certifikat när du surfar in på andra säkra sidor, och det är för att de har giltiga certifikat!
LetsEncrypt har mycket bra guider på hur man ska skapa giltiga cert genom dom!

Permalänk

LetsEncrypt ser bra ut och verkar vara gratis

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Tangentbordskonnässör
Skrivet av freddehboy:

LetsEncrypt ser bra ut och verkar vara gratis

Det är helt gratis! Kör det själv på min server.

Permalänk

Har börjat att titta på det hur man går tillväga. Kan behöva lite vägledning under processen. Läser om steg 1 att avgöra om man gör med något skal program hmm?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk

Nu har jag installerat enligt instruktionerna och fått en csr fil med en key fil och installerat dessa enligt nedan:

// HTTPSercure server const hskey = fs.readFileSync('0000_key-certbot.pem'); const hscert = fs.readFileSync('0000_csr-certbot.pem'); const serverOptions = { key: hskey, cert: hscert }; var httpsServer = https.createServer(serverOptions, app); httpsServer.listen(port, () => console.log(`HTTPSserver is listening on port ${port}!`));

Får i konsolen:
[nodemon] restarting due to changes...
[nodemon] starting `node Server.js`
_tls_common.js:134
c.context.setCert(cert);
^

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Object.createSecureContext (_tls_common.js:134:17)
at Server.setSecureContext (_tls_wrap.js:972:27)
at Server (_tls_wrap.js:852:8)
at new Server (https.js:61:14)
at Object.createServer (https.js:84:10)
at Object.<anonymous> (C:\Programmering - Projekt\Web\FredriksWebbapp\Backend\Server.js:25:25)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
[nodemon] app crashed - waiting for file changes before starting...

Vad göra eller är det fel på certet?

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Nu har jag installerat enligt instruktionerna och fått en csr fil med en key fil och installerat dessa enligt nedan:

// HTTPSercure server const hskey = fs.readFileSync('0000_key-certbot.pem'); const hscert = fs.readFileSync('0000_csr-certbot.pem'); const serverOptions = { key: hskey, cert: hscert }; var httpsServer = https.createServer(serverOptions, app); httpsServer.listen(port, () => console.log(`HTTPSserver is listening on port ${port}!`));

Får i konsolen:
[nodemon] restarting due to changes...
[nodemon] starting `node Server.js`
_tls_common.js:134
c.context.setCert(cert);
^

Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
at Object.createSecureContext (_tls_common.js:134:17)
at Server.setSecureContext (_tls_wrap.js:972:27)
at Server (_tls_wrap.js:852:8)
at new Server (https.js:61:14)
at Object.createServer (https.js:84:10)
at Object.<anonymous> (C:\Programmering - Projekt\Web\FredriksWebbapp\Backend\Server.js:25:25)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
[nodemon] app crashed - waiting for file changes before starting...

Vad göra eller är det fel på certet?

CSR är Certificate Signing Request. Dvs, det är inte något färdigsignerat cert.
Om det inte bara är fel fil så lär något ha gått fel.

Visa signatur

Desktop: Ryzen 5800X3D || MSI X570S Edge Max Wifi || Sapphire Pulse RX 7900 XTX || Gskill Trident Z 3600 64GB || Kingston KC3000 2TB || Samsung 970 EVO Plus 2TB || Samsung 960 Pro 1TB || Fractal Torrent || Asus PG42UQ 4K OLED
Proxmox server: Ryzen 5900X || Asrock Rack X570D4I-2T || Kingston 64GB ECC || WD Red SN700 1TB || Blandning av WD Red / Seagate Ironwolf för lagring || Fractal Node 304

Permalänk
Medlem
Skrivet av evil penguin:

CSR är Certificate Signing Request. Dvs, det är inte något färdigsignerat cert.
Om det inte bara är fel fil så lär något ha gått fel.

Det stämmer, det OP egentligen vill använda är Key och Fullchain.

Permalänk

Terminalen då jag installerade certet, något har nog gått fel här?

C:\Windows\system32>certbot certonly --standalone
Saving debug log to C:\Certbot\log\letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): .....................

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.... You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: a

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: n
Please enter in your domain name(s) (comma and/or space separated) (Enter 'c'
to cancel): ......
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for ........
Cleaning up challenges
[31mProblem binding to port 80: Could not bind to IPv4 or IPv6.[0m
[1m
IMPORTANT NOTES:
[0m - Your account credentials have been saved in your Certbot
configuration directory at C:\Certbot. You should make a secure
backup of this folder now. This configuration directory will also
contain certificates and private keys obtained by Certbot so making
regular backups of this folder is ideal.

C:\Windows\system32>

Verkar som detta är felet?
[31mProblem binding to port 80: Could not bind to IPv4 or IPv6.[0m
[1m

Visa signatur

Computer: Windows 10, 64-bit, Intel i9 - 10850K, Asus Rog MAXIMUS XII HERO (WI-FI), 32GB RAM, Asus RTX3070

Game control: Home Cockpit, Keyboard, Saitek Pro Flight X-56 Rhino H.O.T.A.S. 

Permalänk
Medlem
Skrivet av freddehboy:

Verkar som detta är felet?
[31mProblem binding to port 80: Could not bind to IPv4 or IPv6.[0m
[1m

Du verkar redan ha något som lyssnar på port 80 (webserver etc)
certbot vill kunna använda den porten under certifieringen och nerladdandet av cert.