none
TLS 1.2 support for Microsoft SQL Server 2016 on Windows Server 2016 RRS feed

  • Question

  • Bonjour,

    J'essaie de lancer un siteweb sur un server 2016 en utilisant uniquement la configuration TLS 1.2

    Voici les informations de mon environnement :

    Nom du système d’exploitation:              Microsoft Windows Server 2016 Standard
    Version du système:                         10.0.14393 N/A version 14393
    Fabricant du système d’exploitation:        Microsoft Corporation
    Configuration du système d’exploitation:    Serveur membre
    Type de version du système d’exploitation:  Multiprocessor Free
    Propriétaire enregistré:                    Utilisateur Windows
    Organisation enregistrée:
    Identificateur de produit:                  00377-70516-32850-AA566
    Date d’installation originale:              28/02/2018, 10:05:17
    Heure de démarrage du système:              07/08/2019, 10:17:12
    Fabricant du système:                       VMware, Inc.
    Modèle du système:                          VMware Virtual Platform
    Type du système:                            x64-based PC
    Processeur(s):                              4 processeur(s) installé(s).
                                                [01] : Intel64 Family 6 Model 37 Stepping 1 GenuineIntel ~3096 MHz
                                                [02] : Intel64 Family 6 Model 37 Stepping 1 GenuineIntel ~3096 MHz
                                                [03] : Intel64 Family 6 Model 37 Stepping 1 GenuineIntel ~3096 MHz
                                                [04] : Intel64 Family 6 Model 37 Stepping 1 GenuineIntel ~3096 MHz
    Version du BIOS:                            Phoenix Technologies LTD 6.00, 21/09/2015

    Voici les informations de mon SQL Server :

    C

    Ci dessous comment j'ai modifié mes clefs dans la base de registre pour n'activer que TLS 1.2 et d'activer tout le reste :

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server]
    "DisabledByDefault"=dword:00000000
    "Enabled"=dword:00000000


    Je tiens a préciser que tout fonctionne bien lorsque le TLS 1.0 et TLS 1.1 sont activés.

    Voici l'erreur que le SQL Server met lorsque je passe la configuration en TLS 1.2 :

    Fournisseur SSL : Le client et le serveur ne peuvent pas communiquer car ils ne possèdent aucun algorithme commun.
     
      Description : Une exception non gérée s'est produite au moment de l'exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code. 
    
     Détails de l'exception: System.Data.SqlClient.SqlException: Fournisseur SSL : Le client et le serveur ne peuvent pas communiquer car ils ne possèdent aucun algorithme commun.
    
    
    Erreur source: 
    
    
     Une exception non gérée s'est produite lors de l'exécution de la requête Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.  
    
    Trace de la pile: 
    
    
    
    [SqlException (0x80131904): Fournisseur SSL : Le client et le serveur ne peuvent pas communiquer car ils ne possèdent aucun algorithme commun.
    ]
     
    


    J'ai bien lu les informations de ce lien Microsoft :

    tls-1-2-support-for-microsoft-sql-server


    J'ai aussi installé dans le doute le "Microsoft SQL Server 2012 Native Client - QFE"

    sur le pc qui build le site ASP.NET

    Je compile en Framework 4.6 et je n'ai pas de signature MD5.

    Auriez-vous une idée du problème ?

    Je vous remercie

    Cdt








    mercredi 7 août 2019 10:03

Toutes les réponses

  • Bonjour, 

    Avez-vous configuré .Net FrameWork 4.6 pour qu'il utilise TLS 1.2

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.xxx]
    "SchUseStrongCrypto"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.xxxxxx]
    "SchUseStrongCrypto"=dword:00000001

    ++

    https://stackoverflow.com/questions/33761919/tls-1-2-in-net-framework-4-0/39725273

    +++

    Vous pouvez utiliser un super outil "IISCrypto" pour les tunning tls...:

    https://www.nartac.com/Products/IISCrypto/


    vote if you think useful



    mercredi 7 août 2019 13:31
  • Bonjour,

    Oui j'ai aussi mis ces clefs :

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
    "SchUseStrongCrypto"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
    "SchUseStrongCrypto"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.5.1]
    "SchUseStrongCrypto"=dword:00000001
    
    [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.5.23026] 
    "SchUseStrongCrypto"=dword:00000001


    J'utilise IISCrypto pour m'assurer que mes clefs sont bien prises en compte mais je l'ai fait à la main.

    Je viens de recompiler mon site en forcant le Tls12 dans le code :

        public class Global : System.Web.HttpApplication
        {
    
            private static readonly ILog _log = LogManager.GetLogger(typeof(Global));
    
            protected void Application_Start(object sender, EventArgs e)
            {
                XmlConfigurator.Configure();
                GlobalContext.Properties["UtilisateurReel"] = Environment.UserName.ToLower().Replace("global\\", "");
                System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12;
                Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
                ....
            }

    J'ai même rajouté en plus la property suivante :

    <?xml version="1.0"?>
    <configuration>
        <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
      </configSections> 
      <runtime>
        <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false"/>
      </runtime>
    .....

    Comme indiqué ici :Transport Layer Security (TLS) best practices with the .NET Framework

    Mais que ce soit avec les clefs, le code ou la configuration j'ai toujours le même message d'erreur

    mercredi 7 août 2019 14:06
  • Pouvez-voir voir ce guide ça peut vous aidez:

    http://dba-datascience.com/ssl-or-tls-encryption-on-sql-server/


    vote if you think useful

    mercredi 7 août 2019 14:23
  • Bonjour,

    J'ai essayé la méthode "Self-Signed Certificate Configuration", mais cela ne fonctionne toujours pas :

    Ma connection string utilise bien les propriétés TrustServerCertificate et Encrypt donc voici la valeur :

    connectionString="Server=xxx;Database=xxx;User ID=xxx;Password=xxx;Trusted_Connection=False;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=True" providerName="System.Data.SqlClient"

    MSSQLSERVER

    Cependant j'ai toujours le même message d'erreur.

    J'ai pourtant tout redémarré : SQL Server, IIS et biensûr Windows .

    Quant a la méthode "CA Certificate Configuration for SQL Server" mon service de sécurité me dit d'utiliser la première méthode ....

    Cdt

    Fabrice


    • Modifié Wilgard jeudi 22 août 2019 14:05
    jeudi 22 août 2019 14:03
  • Avez-vous essayé avec une nouvelle version de .Net Framework 4.6 ou plus ? 

    vote if you think useful

    jeudi 22 août 2019 14:17
  • la version installée est la 4.6.2

    J'ai vérifié dans le regedit

    et conformément à la doc officielle Framework version

    Je suis dans le cas

    .NET Framework 4.6.2 Sur les systèmes Mise à jour anniversaire Windows 10 et Windows Server 2016 : 394802


    vendredi 23 août 2019 09:04
  • Je te prpose d'activer FIPS sur le serveur:

    1. Log on to Windows as a Windows system administrator.
    2. Click Start.
    3. Click Control Panel.
    4. Click Administrative Tools. (You may have to switch to large Icons for the next step.)
    5. Click Local Security Policy. The Local Security Settings window appears.
    6. In the navigation pane, click Local Policies, and then click Security Options.
    7. In the pane on the right, double-click System cryptography: Use FIPS compliant algorithms for encryption, hashing, and signing.
    8. In the dialog box that appears, click Enabled, and then click Apply.
    9. Click OK.
    10. Close the Local Security Settings window.

    https://support.microsoft.com/en-ca/help/4014354/how-to-use-sql-server-2016-in-fips-140-2-compliant-mode


    vote if you think useful

    vendredi 23 août 2019 09:17
  • Je viens d'activer FIPS, j'ai redémarré SQL Server, IIS et Windows mais malheureusement ça ne change rien.

    J'ai toujours la même erreur

    vendredi 23 août 2019 09:42
  • J'ai changé les paramètres du client SQL mais ca ne change rien non plus

    vendredi 23 août 2019 15:06
  • J'ai trouvé le problème !!!

    En fait ca ne vient pas du tout de l'application.

    Quelle perte de temps ...

    En fait mon serveur SQL Server 2016 est lié a un autre SQL Server mais 2012 qui n'est pas encore migré en TLS 1.2 et bien entendu on utilise des vues sur ce dernier.

    Du coup ce sont des vues qui ne passent pas, un simple :

    SELECT * FROM UtilisateursView
    Me renvoie bien le message d'erreur à savoir :
    Le fournisseur OLE DB "SQLNCLI11" du serveur lié "SRV-WEB" a retourné le message "Le client n'a pas pu établir la connexion".
    Msg -2146893007, Niveau 16, État 1, Ligne 0
    Fournisseur SSL : Le client et le serveur ne peuvent pas communiquer car ils ne possèdent aucun algorithme commun.

    Donc en fait ma question devient plutôt est-ce qu'il est possible de lier 2 serveurs SQL Server un entre 2012 TLS 1.0 et l'autre en 2016 TLS 1.2 ?

    D'ailleurs un simple "Test connexion" ne passe pas

    Vu tous les essais je n'en ai pas l'impression.

    Mais je suis preneur si vous avez une idée

    Cdt

    Fabrice




    • Modifié Wilgard lundi 26 août 2019 15:50
    lundi 26 août 2019 15:35