Ciao,
vedo che c'è una risposta corretta al pacchetto di handshake SSL
ma alla successiva richiesta di tipo OPTION viene risposto "Method not allowed".
Sì, inviare una richiesta di tipo OPTION è il normale comportamento di un browser quando deve inviare una richiesta Ajax ad un altro dominio (CORS: Cross-Origin Resource Sharing).
Il browser, in pratica, vuol sapere dal server se il dominio di origine è autorizzato a rivolgergli richieste Ajax oppure no. Il server deve rispondere in maniera appropriata ma nel tuo caso sta proprio rifiutando la richiesta con questo errore:
Method not allowed
Dev'essere che il tuo servizio è configurato per ricevere solo richieste di tipo GET e POST.
Vedi se questa discussione ti è d'aiuto:
https://stackoverflow.com/questions/25437405/cors-access-for-httplistenerNon leggere la risposta accettata ma vai all'ultima in fondo.
1- una comunicazione HTTPS di questo genere è fattibile?
Sì, non dovrebbero esserci problemi. Hai detto che il servizio è in ascolto su "http://127.0.0.1:8161". Vuoi dire che l'hai configurato solo su localhost e quindi non è possibile accedere al servizio dall'esterno della macchina? Se è questo il caso, perché ti è necessario un certificato SSL? Si presuppone che la comunicazione sia al sicuro fintanto che i pacchetti non escono dalla macchina.
2- questo tipo di comunicazione js <--> c# è sicuro?
A questo non è possibile rispondere. Dipende da come lo usi. E' come dire: "un coltellino svizzero è sicuro?". La risposta potrebbe essere: "Non se punti la lama verso di te".
Per esempio, inviando numeri di carta di credito su internet con connessione non sicura ti esponi a furti di dati a prescindere dalla tecnologia usata.
3- installando questo client su tanti terminali devo generare un certificato unico per ogni macchina?
No, dato che il certificato si installa lato server ti basterà giusto un certificato.
4- nel caso sia possibile questa soluzione vanno bene dei certificati autofirmati da associare alla porta del programma?
No, da quando esiste Let's Encrypt è quasi inutile autofirmarli. Let's Encrypt ti permette di ottenere un certificato SSL da una certification authority riconosciuta e puoi fare tutto in maniera gratuita e automatizzata con un tool da riga di comando. Leggi qua la documentazione:
https://letsencrypt.org/docs/Fai un tentativo, veri se riesci ad allacciarlo al tuo servizio. In alternativa al servizio per Windows hai valutato se realizzare un sito web ASP.NET con WCF?
5- Esiste un metodo alternativo di comunicazione che non richieda la creazione di certificati?
Http semplice, senza certificato, ma solo se i pacchetti restano nella macchina o al limite nella rete locale della tua azienda dove, si presuppone, non esistano persone intenzionate a rubare dati.
ciao,
Moreno
Modificato da BrightSoul il 09 febbraio 2018 19.57 -