12 messaggi dal 31 luglio 2009
Salve a tutti,
devo creare una procedura che trasferisca dei file verso un server FTP ( in una applicazione windows form).
La mia applicazione deve usare SSL e l'intenzione è che per accedere al server e trasferire il file usi un certificato.

Ho configurato con Filezilla un server per SSL (durante la configurazione ho generato un file .crt, che in base a quanto ho capito dovrei usare dal client per accedere al server)

Le mie domande sono due:

1) Ho capito correttamente che nel momento in cui accedo al server devo (in qualche modo) far validare la mia copia del file dal server ?

2) In base a diverse ricerche su msdn e google, il "qualche modo" per accedere al server dovrebbe essere il seguente :

FtpWebRequest ftpReq = (FtpWebRequest)FtpWebRequest.Create(pathremoto);

ftpReq.Credentials = new NetworkCredential(user, password);
ftpReq.UseBinary = true;
ftpReq.KeepAlive = false;
ftpReq.UsePassive = true;

ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
ftpReq.EnableSsl = true;

ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CertificatePolicy);
X509Certificate oCert = new System.Security.Cryptography.X509Certificates.X509Certificate(pathCertificato);
ftpRequest.ClientCertificates.Add(oCert);


ftpStream = ftpRequest.GetRequestStream();

byte[] byteBuffer = new byte[bufferSize];
int bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);

while (bytesSent != 0)
{
ftpStream.Write(byteBuffer, 0, bytesSent);
bytesSent = localFileStream.Read(byteBuffer, 0, bufferSize);
}

localFileStream.Close();
ftpStream.Close();
ftpReq= null;


A questo punto ho questo problema : su questa istruzione X509Certificate oCert = new System.Security.Cryptography.X509Certificates.X509Certificate(pathCertificato);

si scatena l'errore : "Cannot find the requested object.\r\n".

Questo approccio non è corretto ? Non posso usare X509Certificate sul file che ho generato da filezilla ?

Grazie in anticipo per ogni eventuale aiuto.
Modificato da AudioMix il 17 settembre 2014 10.47 -
Modificato da AudioMix il 17 settembre 2014 10.55 -
Modificato da AudioMix il 17 settembre 2014 10.56 -
11.886 messaggi dal 09 febbraio 2002
Contributi
ciao,

AudioMix ha scritto:

1) Ho capito correttamente che nel momento in cui accedo al server devo (in qualche modo) far validare la mia copia del file dal server ?

Mmmh... no. Cosa intendi con "copia del file"?
Devi semplicemente autogenerare un certificato come indicato nella guida di FileZilla Server e configurarlo per usare la modalità SSL/TSL.
https://wiki.filezilla-project.org/SSL/TLS#Server_Setup

La chiave privata e il certificato devono restare al sicuro sulla macchina server; non devi condividerli con i client.

I client otterranno il certificato dal server stesso, durante la negoziazione, come puoi vedere da questo diagramma. Comunque questo è un dettaglio di cui non ti devi preoccupare: il tuo client si autenticherà normalmente con username e password. Devi solo impostare ftpReq.EnableSsl = true; come hai già fatto.

AudioMix ha scritto:

2) In base a diverse ricerche su msdn e google, il "qualche modo" per accedere al server dovrebbe essere il seguente :

Elimina la parte in cui crei un'istanza di X509Certificate perché, come abbiamo detto, il client non deve essere preventivamente in possesso di un certificato.
C'è giusto un problemino di cui devi tener conto: dato che il certificato è stato autofirmato (anziché essere emesso da una certification authority riconosciuta), il client per default non si fiderà della sua validità.

Devi forzarlo a prendere per buono il certificato che gli arriverà dal server. Prova usando questo codice:
//restituire true sarà l'indicazione che il certificato va reputato valido
ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => { return true; };


Altre info in questa discussione:
http://stackoverflow.com/questions/12506575/how-to-ignore-the-certificate-check-when-ssl

ciao,
Moreno
Modificato da BrightSoul il 18 settembre 2014 19.41 -

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.