Connexion ASP classique à SQL Server 2014 sans TLS 1.0 à l'aide d'ADODB.Connection

8

TLS 1.0 étant désactivé au nom de la conformité PCI, je ne parviens pas à faire fonctionner une application ASP classique 32 bits.

Selon les recommandations MS / Stack Exchange, j'ai installé:

  1. SQL Server 2014 SP1 CU1
  2. .NET Framework 4.6

Cela a permis à nos applications ASP.NET / SSMS de fonctionner. Mais notre application Classic ASP, qui utilise un ADODB.Connectionobjet ne fonctionne pas.

J'ai essayé une chaîne de connexion qui utilise Provider=SQLNCLI11;, mais cela ne semble pas aider non plus. Le fournisseur de mémoire partagée se plaint toujours que rien ne se trouve à l'autre bout du tuyau. Message d'erreur:

Erreur Microsoft SQL Server Native Client 11.0 «80004005»

Fournisseur de mémoire partagée: aucun processus n'est à l'autre extrémité du canal.

J'ai également essayé d'utiliser des canaux nommés avec la chaîne de connexion Provider=SQLNCLI11;Server=np:\\.\pipe\MSSQL$SQLEXPRESS\sql\query;Database=northwind;Trusted_Connection=Yes;et j'ai reçu ce message d'erreur:

Erreur Microsoft SQL Server Native Client 11.0 «80004005»

Fournisseur de tuyaux nommé: aucun processus n'est à l'autre extrémité du tuyau.

Existe-t-il un correctif pour ADODB que je devrais connaître? Dois-je envisager d'utiliser des canaux nommés d'une autre manière ou similaire à la place? (même si je suis un peu perplexe quant aux raisons pour lesquelles la mémoire partagée ne fonctionne pas, quels que soient les paramètres TLS)


Mises à jour des commentaires:

Le serveur Web et SQL Server sont sur la même boîte.

Il s'agit d'une instance nommée SQLExpress. La chaîne de connexion fonctionnant avec TLS 1.0 activé est:

"Driver={SQL Server}; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes; Integrated_Security=True;"

J'ai aussi essayé:

"Provider=SQLNCLI11; Server=.\SQLExpress; Database=northwind; Trusted_Connection=Yes;"

Aucun ne fonctionne une fois que TLS 1.0 est désactivé. Je sais que Trusted_Connection / Integrated_Security est redondant, mais jouer avec ces derniers ne semble pas aider non plus.

J'ai basculé l'activation, la désactivation et la commande pour les canaux TCP et nommés. Le nom du canal utilisé dans la chaîne de connexion ci-dessus provient directement de la configuration du serveur pour cette instance. J'ai également essayé de désactiver la mémoire partagée pour m'assurer que les canaux nommés fonctionnent. Je n'ai pas essayé TCP (comme si la mémoire partagée ne fonctionnait pas à cause de TLS, pourquoi TCP?) La mémoire partagée et les canaux nommés fonctionnent tous les deux avec TLS 1.0 activé. Dès que je retourne la clé de registre pour désactiver TLS 1.0 (et redémarrer), les messages d'erreur ci-dessus se produisent. Nous allons probablement mettre cette machine derrière un proxy.

Le service serveur SQL ne démarre pas après la désactivation de TLS 1.0 et SSL 3.0

Le problème décrit dans ce lien est traité par CU1 dans ma question posée ci-dessus. L'instance de SQL Server démarre avec TLS 1.0 désactivé (grâce à la mise à jour MS). Les applications basées sur .NET fonctionnent très bien avec l'instance SQL (après la mise à jour vers 4.6). Cette question est spécifique à une application ASP classique (32 bits). Ma compréhension est que le client natif est également corrigé par CU1, d'où ma confusion quant à la raison pour laquelle cela ne fonctionne pas.

userx
la source

Réponses:

2

Vous essayez peut-être d'utiliser des pilotes hérités 32 bits.

Essayez d'exécuter C: \ Windows \ SysWOW64 \ odbcad32.exe pour créer un DSN qui se connecte à votre base de données SQL Server à l'aide du pilote SQL Server 32 bits. Testez d'abord la connectivité à l'aide de l'interface graphique.

Essayez ensuite de spécifier votre DSN dans votre chaîne de connexion comme suit:

DSN=myDsn;Uid=myUsername;Pwd=;

La version 64 bits se trouve dans: C: \ Windows \ System32 \ odbcad32.exe

PS Je n'ai pas essayé cela mais le nom du fournisseur pour le serveur SQL 32 bits est en fait "SQL Server". Ce serait bien si tout ce que vous aviez à faire était de remplacer SQLNCLI11 par SQL Server. Voici mon fichier DSN que j'ai créé avec la version 32 bits - notez le pilote ...

[ODBC]
DRIVER=SQL Server
UID=sa
WSID=P13-0000
APP=Microsoft® Windows® Operating System
SERVER=mcdba1
Piquer
la source
0

Vous aurez besoin des correctifs ADO.NET et SQLNCLI11 pour que vos pilotes fonctionnent avec TLS 1.2.

Depuis le 29 janvier, Microsoft SQL Server prend en charge TLS 1.2 pour SQL Server 2008, SQL Server 2008 R2, SQL Server 2012 et SQL Server 2014 et les principaux pilotes clients comme Server Native Client, Microsoft ODBC Driver pour SQL Server, Microsoft JDBC Driver pour SQL Server et ADO.NET (SqlClient).

Vous pouvez en savoir plus sur la version ici . La liste des versions prenant en charge TLS 1.2 ainsi que les emplacements de téléchargement des composants client et serveur est disponible dans KB3135244 .

Amit Banerjee
la source