cancel
Showing results for 
Search instead for 
Did you mean: 

TLS 1.2 Issue - in Classic ASP environment

I manage a few sites that still use Classic ASP.

The method of connection is via a MSXML2 component pointing to https://secure.authorize.net/gateway/transact.dll

Is there a simple change i can make in this code somewhere (see below), to test via the sandbox, and see if the server is TLS 1.2 compliant?

 

Thanks!

 

[code]

set objHttp = server.Createobject("MSXML2.ServerXMLHTTP")
if err.number <> 0 then
    Response.write(err.Description)
    response.End()
end if
'on error goto 0

objHttp.open "POST", strPost, false
objHttp.Send strRequest

'Get response
objHttpStatus = objHttp.status
strResponse   = objHttp.responseText
set objHttp      = nothing

[/code]

snooper
Member
71 REPLIES 71

My host said that since I am using MySQL (instead of MSSQL), I don't need 1.0 or 1.1.  And Authorize.net specifically said to disable 1.0 and 1.1.  They did have 1.0 and 1.1 enabled earlier, and I was still getting the same error message.

 

I could try to ask them to re-enable 1.0 and 1.1, but based on what Authorize.net told me, I thought this was the cause of my problem, so I raised quite a ruckus with the host to get 1.0 and 1.1 disabled.  Do you still think I need to have 1.0 and 1.1 enabled, and why would Authorize.net say that I had to have them disabled?  And doesn't having them enabled make me non-PCI compliant?

 

Thanks,

Tom

The connection between your webserver and your database server is not the same as the connection between your shopping cart app and Authorize.net.  The connection to Authorize.net must be TLS 1.2 now.

That being said, I don't know of very many Classic ASP scripts that write to MySQL databases.  Can you post one of your scripts that are failing or at least the full error message that you are getting?

Try this script as well and post what it returns.

<%
Set objHttp = Server.CreateObject("WinHTTP.WinHTTPRequest.5.1")
objHttp.open "GET", "https://howsmyssl.com/a/check", False
objHttp.Send
Response.Write objHttp.responseText
Set objHttp = Nothing
%>

Yes, I was using that very script when working with the host to get TLS 1.2 enabled, and 1.0 and 1.1 disabled.  When the server supported 1.0 and 1.1 (but not 1.2), the script worked fine, returning all of the XML.  Now that the server ONLY supports 1.2, the script returns an error:  "An error occurred in the secure channel support".  That occurs at the Send line (line 4).

 

Most posts/sites I've seen actually say to use Server.CreateObject("MSXML2.ServerXMLHTTP.6.0") instead of Server.CreateObject("WinHTTP.WinHTTPRequest.5.1").  I've tried that too with the same results.

 

Interestingly, as I say, when 1.0 and 1.1 were enabled, this script worked fine, but I still got the same error in trying to POST to the authorize.net dll (with either XML object).

 

The code is communicating fine with the MySQL database, which is on the local host anyway.  All of my issues revolve around sending the transaction data to Authorize.net.  Can't do it!

If it sheds any more light on the matter, I have a simple script that only tries to post sample, valid, transaction data to Authorize.net.  The script looks much like this:

 

 <%
Dim xml, strStatus, strRetval
On Error Goto 0
Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP.6.0")
xml.open "POST", "https://secure.authorize.net/gateway/transact.dll?x_login=aaaa&x_tran_key=bbbb&x_delim_data=true&x_d...", false
xml.send ""
strStatus = xml.Status
strRetval = xml.responseText
Response.Write "here="
Response.Write xml.responseText
Response.End
%>

 

(Obviously, I have replaced the sensitive data, like login info with letters aaaa, bbbb, cccc, etc. for posting to this forum, but in the actual test script, they are valid values.)

 

Until yesterday, this script worked fine.  When Authorize.net started requring 1.2 only, it stopped working and gives the same "An error occurred in the secure channel support" error.  Authorize.net told me to have TLS 1.0 and 1.1 disabled, and to make sure 1.2 is enabled.  I've done that, and I still get the same error.

 

I've also tried using different server objects instead of "MSXML2.ServerXMLHTTP.6.0".  I've tried "WinHttp.WinHttpRequest.5.1" and "MSXML2.ServerXMLHTTP" and get the same error.

 

I've tried "Microsoft.XMLHTTP" and "MSXML2.XMLHTTP.6.0" and still get an error, although for these two, the error is "The system cannot locate the resource specified."

 

All of this held true starting yesterday, before I switched the server to TLS 1.2 only, and after.  But the script was working fine before yesterday (using server object "Microsoft.XMLHTTP").

 

I can't figure why I can't post over https to another server now.  Even the other test script, the one that POSTS to howsmyssl.com, returns the same set of errors based on the Server Object I'm trying to use.

 

I've exhausted all ideas of what to try next.  Does anyone know what's going on here?

 

While I am not a developer I am a System Admin for a hosting provider , and we have been getting inquiries from customers who have been having issues connecting to authorize.net endpoints even though TLS1.0 was disabled. Apparently, you also need to force .NET to use TLS 1.2 by adding the following registry keys.

 

Warning

Incorrectly editing the registry might severely damage your system. Before making changes to the registry, you should back up any valued data on the computer.



Check for the registry keys first using powershell:
Get-ItemProperty -path "Registry::HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" -Name SchUseStrongCrypto

Get-ItemProperty -path "Registry::HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" -Name SchUseStrongCrypto

add registry keys:

reg add "HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319" /v SchUseStrongCrypto /d 00000001 /t REG_DWORD
reg add "HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319" /v SchUseStrongCrypto /d 00000001 /t REG_DWORD

 

I hope this helps.

Can you verify that you can load any page on the server from https?

 

If not, see if you can load a page from http.  If it loads from http but not https then the problem is at the server level meaning that either your SSL certificate is bad or something in the mechanics of the server is not working properly.

 

What server are you using? Windows? Linux?

The pages on my site load fine over http or https.  And my code interacts with my MySQL database fine too.  The only problem is in trying to POST transaction data to Authorize.net over https. 

 

I'm using a Windows VPS server hosted at LiquidWeb running Windows 2008 R2 and IIS 7.

Since you are on a 2008r2 server I am pretty sure you need these registry values set:

 

0x00000800

 

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\DefaultSecureProtocols
 
Value: 0x00000800
 

On x64-based computers, DefaultSecureProtocols must also be added to the Wow6432Node path:

 

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\DefaultSecureProtocols
 
Value: 0x00000800

I have gone into Regedit on my server, and saw that that key was indeed not there.  So I added it:

 

[Tried to insert a screenshot of the registry, but the forum wouldn't let me.]

 

I then rebooted the server just to make sure.  But I'm still getting the same errors.  Rats!  Anyone have any other ideas?

 

 

I should say too, that I don't know if this is an x64-based computer, but there was no WOW6432NODE key at all, so I am assuming it is not.  So I only added the first of those two keys.