Introduction
Recently I ran some load tests in Visual Studio, but got the error “Request Failed: The request was aborted: Could not create SSL/TLS secure channel”. Those load tests were working fine previously but suddenly stopped working. After investigation, I found that recently our production server had some changes in TLS protocol support and now TLS 1.2 support is added.
So, the cause is the recent change on the server, but now we must find the solution to resolve the issue and run the load test in Visual Studio.
Solutions
We need to create a Web Performance Test Plug-In to resolve this issue.
- Open a Web performance and load test project that contains a Web load test.
- In Solution Explorer, right-click on the solution select Add, and then choose New Project. The Add New Project dialog box is displayed.
- Under Installed Templates, select Visual C#.
- In the list of templates, select Class Library.
- In the Name text box, type a name for your class. Choose OK.
- The new class library project is added to Solution Explorer and the new class appears in the Code Editor.
- In Solution Explorer, right-click the References folder in the new class library and select Add Reference.
- The Add Reference dialog box is displayed.
- Choose the .NET tab, scroll down, and select Microsoft.VisualStudio.QualityTools.WebTestFramework. Choose OK.
- The reference to Microsoft.VisualStudio.QualityTools.WebTestFramework is added to the Reference folder in Solution Explorer.
- In Solution Explorer, right-click on the top node of the Web performance and load test project that contains the load test to which you want to add the Web performance test plug-in and select Add Reference.
- The Add Reference dialog box is displayed. Choose the Projects tab and select the Class Library Project. Choose OK.
- In the Code Editor, write the code of your plug-in. First, create a new public class that derives from WebTestPlugin.
- Implement code inside one or more of the event handlers.
public class Tls12ForcedPlugin : WebTestPlugin
{
[Description("Enable or Disable the plugin functionality")]
[DefaultValue(true)]
public bool Enabled { get; set; }
public override void PreWebTest(object sender, PreWebTestEventArgs e)
{
base.PreWebTest(sender, e);
// We're using SSL2 here and not TLS. Without this line, nothing works.
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc00); // SecurityProtocolType.Ssl2;
// we wire up the callback so we can override behavior and force it to accept the cert
ServicePointManager.ServerCertificateValidationCallback = RemoteCertificateValidationCB;
// let them know we made changes to the service point manager
e.WebTest.AddCommentToResult(this.ToString() + " PP has made the following modification-> ServicePointManager.SecurityProtocol set to use SSLv3 in WebTest Plugin.");
}
public static bool RemoteCertificateValidationCB(Object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors)
{
// If it is really important, validate the certificate issuer here.
// this will accept any certificate
return true;
}
}
- If you are using Framework 4.0 then you may get the error SecurityProtocolType.Ssl2 not found.
For other Framework
SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12
For Framework 4.0
(SecurityProtocolType)(0xc0 | 0x300 | 0xc00)
After you have written the code, build the new project.
- Open a Web performance test. To add the Web performance test plug-in, choose Add Web Test Plug-in on the toolbar.
- The Add Web Test Plug-in dialog box is displayed. Under Select a plug-in, select your Web performance test plug-in class.
- In the Properties for the selected plug-in pane, set the initial values for the plug-in to use at run time. Choose OK.
- The plug-in is added to the Web Test Plug-ins folder.
- Now if you try to run the load test, it will run fine.