More .NET libraries
-
Rebex SFTP
.NET SFTP client
-
Rebex File Transfer Pack
FTP and SFTP together
-
Rebex Total Pack
All Rebex .NET libraries together
Back to feature list...
Authentication methods
On this page:
Username and password
The most common FTP authentication uses username and password:
// connect to a server
var ftp = new Ftp();
ftp.Connect(hostname);
// log in
ftp.Login(username, password);
' connect to a server
Dim ftp As New Rebex.Net.Ftp()
ftp.Connect(hostname)
' log in
ftp.Login(username, password)
Login
method with a username of "anonymous" and use an e-mail address as a password.
Username, password and account
Some FTP servers require an "account name" in addition to the username and password:
// connect to a server
var ftp = new Rebex.Net.Ftp();
ftp.Connect(hostname);
// log in using the "account name"
ftp.Login(username, password, account);
' connect to a server
Dim ftp As New Rebex.Net.Ftp()
ftp.Connect(hostname)
' log in using the "account name"
ftp.Login(username, password, account)
Client certificate authentication
Client certificates are an optional way to authenticate the client to the server. This is only possible when connecting/authenticating to a TLS/SSL-capable FTP server. However, most servers still require authentication with a username and password even when client certificate authentication has taken place.
A certificate with an associated private key is needed for client authentication. Set Settings.SslClientCertificateRequestHandler
property
to an implementation of certificate request handler that is called when the FTP server asks for client certificate.
a) Use the built-in StoreSearch
handler, that searches the user's certificate store for a first suitable certificate:
// set a certificate request handler
ftp.Settings.SslClientCertificateRequestHandler = CertificateRequestHandler.StoreSearch;
// connect to the server
ftp.Connect(hostname, SslMode.Explicit);
// authenticate (still needed in many cases)
if (!ftp.IsAuthenticated)
ftp.Login(username, password);
' set a certificate request handler
ftp.Settings.SslClientCertificateRequestHandler = CertificateRequestHandler.StoreSearch
' connect to the server
ftp.Connect(hostname, SslMode.Explicit)
' authenticate (still needed in many cases)
If Not ftp.IsAuthenticated Then ftp.Login(username, password)
b) Use the built-in PFX-based certificate request handler:
// load a certificate chain from a .P12 or .PFX file
CertificateChain certificate = CertificateChain.LoadPfx("mycert.p12", "password");
// set a certificate request handler
ftp.Settings.SslClientCertificateRequestHandler = CertificateRequestHandler.CreateRequestHandler(certificate);
// connect to the server
ftp.Connect(hostname, SslMode.Explicit);
// authenticate (still needed in many cases)
if (!ftp.IsAuthenticated)
ftp.Login(username, password);
' load a certificate chain from a .P12 or .PFX file
Dim certificate As CertificateChain = CertificateChain.LoadPfx("mycert.p12", "password")
' set a certificate request handler
ftp.Settings.SslClientCertificateRequestHandler = CertificateRequestHandler.CreateRequestHandler(Certificate)
' connect to the server
ftp.Connect(hostname, SslMode.Explicit)
' authenticate (still needed in many cases)
If Not ftp.IsAuthenticated Then ftp.Login(username, password)
c) Write a custom handler, for example to load the certificate from a .pfx/.p12 file:
private class MyCertRequestHandler : ICertificateRequestHandler
{
// This method is called during TLS/SSL negotiation
// when the server requests client certificate authentication
public CertificateChain Request(TlsSocket socket, DistinguishedName[] issuers)
{
// provide a certificate loaded from a .pfx/.p12 file
return CertificateChain.LoadPfx(clientCertPath, clientCertPassword);
}
}
Private Class MyCertRequestHandler
Implements ICertificateRequestHandler
' This method is called during TLS/SSL negotiation
' when the server requests client certificate authentication
Public Function Request(socket As TlsSocket, _
issuers() As DistinguishedName) _
As CertificateChain _
Implements ICertificateRequestHandler.Request
' provide a certificate loaded from a .pfx/.p12 file
Return CertificateChain.LoadPfx(clientCertPath, clientCertPassword)
End Function
End Class
Don't forget to register the handler:
// set a certificate request handler
ftp.Settings.SslClientCertificateRequestHandler = new MyCertRequestHandler();
// connect to the server
ftp.Connect(hostname, port, SslMode.Explicit);
// authenticate (still needed in many cases)
if (!ftp.IsAuthenticated)
ftp.Login(username, password);
' set a certificate request handler
ftp.Settings.SslClientCertificateRequestHandler = New MyCertRequestHandler()
' connect to the server
ftp.Connect(hostname, port, SslMode.Explicit)
' authenticate (still needed in many cases)
If Not ftp.IsAuthenticated Then ftp.Login(username, password)
Back to feature list...