PowerTCP Mail for .NET
CertificateRequested Event
See Also  Example Send comments on this topic.
Dart.PowerTCP.Mail Namespace > Tcp Class : CertificateRequested Event




This event is raised when a certificate has been requested.

Syntax

Visual Basic (Declaration) 
<DescriptionAttribute("Raised when a certificate has been requested to send for verification.")>
<CategoryAttribute("Security")>
Public Event CertificateRequested As EventHandler
Visual Basic (Usage)Copy Code
Dim instance As Tcp
Dim handler As EventHandler
 
AddHandler instance.CertificateRequested, handler
C# 
[DescriptionAttribute("Raised when a certificate has been requested to send for verification.")]
[CategoryAttribute("Security")]
public event EventHandler CertificateRequested
Managed Extensions for C++ 
[DescriptionAttribute("Raised when a certificate has been requested to send for verification.")]
[CategoryAttribute("Security")]
public: __event EventHandler* CertificateRequested
C++/CLI 
[DescriptionAttribute("Raised when a certificate has been requested to send for verification.")]
[CategoryAttribute("Security")]
public:
event EventHandler^ CertificateRequested

Example

The following example demonstrates creating a simple secure client.
Visual BasicCopy Code
Private Sub SecureTest()

    'Allow component to negotiate best security option
    Tcp1.SecureProtocol = SecureProtocol.Auto

    ' Connect to a secure echo server.
    Tcp1.Connect("mysecureserver", 7)

    ' Send secure data
    Tcp1.Send("Test")

    ' Receive and display secure data
    System.Diagnostics.Debug.WriteLine(Tcp1.Receive().ToString())

    ' Close the connection
    Tcp1.Close()
End Sub

Private Sub Tcp1_CertificateRequested(ByVal sender As Object, ByVal e As System.EventArgs) Handles Tcp1.CertificateRequested
    'The server has requested client authentication
    'Allow the user to select a certificate
    Dim certform As New CertificateListForm(True, True)
    If (certform.ShowDialog(Me) = DialogResult.OK) Then
        Tcp1.Certificate = certform.SelectedCertificate
    End If
End Sub

Private Sub Tcp1_CertificateReceived(ByVal sender As Object, ByVal e As Dart.PowerTCP.SslSockets.CertificateReceivedEventArgs) Handles Tcp1.CertificateReceived
    'If the server's certificate is invalid for any reason,
    'the user can decide whether to proceed
    Dim msg As String = "The certificate was invalid for the following reason(s)" + vbLf

    ' Check to see if the certificate is from a trusted root.
    If (Not e.TrustedRoot) Then
        msg += "This certificate is not from a trusted root" + vbLf
    End If

    ' Check to see if the certificate has a valid date.
    If (Not e.ValidDate) Then
        msg += "This certificate does not have a valid date" + vbLf
    End If

    ' Check to see if the certificate has a valid name.
    If (Not e.ValidName) Then
        msg += "This certificate does not have a valid name" + vbLf
    End If

    If (Not e.Accept) Then
        msg += "Would you like to accept this certificate anyway?"
        If (MessageBox.Show(msg, "Invalid Cert Received", MessageBoxButtons.YesNo) = DialogResult.Yes) Then
            e.Accept = True
        End If
    End If
End Sub
C#Copy Code
private void SecureTest()
{
	//Allow component to negotiate best security option
	tcp1.SecureProtocol = SecureProtocol.Auto;

	// Connect to a secure echo server.
	tcp1.Connect("mysecureserver", 7);

	// Send secure data
	tcp1.Send("Test");

	// Receive and display secure data
	System.Diagnostics.Debug.WriteLine(tcp1.Receive().ToString());

	// Close the connection
	tcp1.Close();
}		

private void tcp1_CertificateRequested(object sender, System.EventArgs e)
{
	//The server has requested client authentication
	//Allow the user to select a certificate
	CertificateListForm certform = new CertificateListForm(true, true);
	if(certform.ShowDialog(this) == DialogResult.OK)
		tcp1.Certificate = certform.SelectedCertificate;
}

private void tcp1_CertificateReceived(object sender, CertificateReceivedEventArgs e)
{
	//If the server's certificate is invalid for any reason,
	//the user can decide whether to proceed
	string msg = "The certificate was invalid for the following reason(s)\n";

	// Check to see if the certificate is from a trusted root.
	if(!e.TrustedRoot)
		msg+= "This certificate is not from a trusted root\n";

	// Check to see if the certificate has a valid date.
	if(!e.ValidDate)
		msg+= "This certificate does not have a valid date\n";

	// Check to see if the certificate has a valid name.
	if(!e.ValidName)
		msg+= "This certificate does not have a valid name\n";

	if(!e.Accept)
	{
		msg += "Would you like to accept this certificate anyway?";
		if(MessageBox.Show(msg, "Invalid Cert Received", MessageBoxButtons.YesNo) == DialogResult.Yes)
			e.Accept = true;
	}
}

Remarks

The CertificateRequested event is raised when a secure server requests a certificate from the client for client authentication. The SslStream.Certificate property of the current Tcp component (or, if using a different component, the Tcp component used for the underlying connection) must be set to a valid certificate. The easiest way to do this is to cast the sender parameter to an SslStream, then set the SslStream.Certificate property to a valid certificate.

Many objects provide a high-level Object.Certificate property, which represents the certificate used by the object. If the object you are using has such a high-level property it is recommended to use this property instead of the implementation described above.

Requirements

Target Platforms: Microsoft .NET Framework 2.0

See Also

Documentation Version 3.2
© 2010 Dart Communications. All Rights Reserved.