Olá pessoal,
Boa noite!
Neste post vou comentar sobre algumas dificuldades que enfrentei em um projeto do setor BI na empresa em que trabalho, onde resolvemos implementar o recém lançado Microsoft Reporting Services 2016 (que incorporou o Datazen, adquirido pela Microsoft) para a disponibilização de relatórios, painéis, KPIs e dashboards de Vendas e Cobrança via internet, sem a necessidade de se conectar em uma VPN, mas utilizando autenticação do Active Directory.
Um dos grandes ganhos que esse projeto irá trazer para a empresa é a possibilidade de visualização dessas informações em dispositivos Web (Chrome, Firefox, Internet Explorer e qualquer outro browser), Tablets e dispositivos móveis (iOS e Android)
Para a implementação da estrutura necessária, o DBA Tiago Neves realizou a instalação e configuração do SQL Server 2016 + Reporting Services e disponibilizou o ambiente para a equipe de BI. Entretanto, ao tentar publicar qualquer relatório utilizando o SQL Server Mobile Report Publisher, era gerada a mensagem de erro abaixo:
Como vocês podem perceber, essa mensagem de erro é bem genérica e não ajuda muito na identificação e resolução do problema. Sendo assim, eu, Tiago e a DBA Caroline, começamos a analisar os arquivos de log do Reporting Services, que geralmente ficam localizados em “C:\Program Files\Microsoft SQL Server\MSRS13.Sua_Instancia\Reporting Services\LogFiles”, encontramos a seguinte mensagem de erro:
System.Reflection.TargetInvocationException Exception has been thrown by the target of an invocation. — System.InvalidOperationException This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.
Com essa mensagem pudemos entender o que estava realmente ocorrendo: O servidor estava com as configurações de criptografia de dados FIPS habilitada, e o Reporting Services por padrão, não suporta essa configuração, conforme podemos ler em um blog da Microsoft: “This is happening because FIPS is enabled on the Reporting Services server and Report Manager does not support the Local Security Policy ‘System cryptography: Use FIPS compliant algorithms for encryption, hashing, and signing'” (fonte aqui).
Conversamos com o analista de segurança da empresa e o mesmo nos orientou a não desabilitar essa configuração no servidor devido a uma política de segurança da empresa.
Desativando o FIPS
Apenas para fins de testes, e no ambiente de Desenvolvimento, desativamos o FIPS e o Reporting Services se comportou normalmente, nos permitindo salvar e publicar os relatórios sem qualquer problema.
Para desativar essa configuração, basta acessar o registro do Windows, encontrar a configuração “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\fipsalgorithmpolicy” e alterar o valor da chave “Enabled” para 0.
Após isso, reinicie o serviço do Reporting Services e o SQL Server Mobile Report Publisher irá funcionar normalmente.
Resolvendo o problema sem desativar o FIPS
Como não poderíamos alterar essa configuração nos servidores, precisamos buscar outra solução para resolver esse problema. Depois de muitas pesquisas, o Tiago encontrou uma solução no Fórum Technet, onde é necessário alterar o arquivo machine.config do Microsoft .NET Framework do servidor (Geralmente localizado em C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config) e adicionar a seguinte configuração ao final do arquivo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<mscorlib> <cryptographySettings> <cryptoNameMapping> <cryptoClasses> <cryptoClass SHA256CSP="System.Security.Cryptography.SHA256CryptoServiceProvider, System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </cryptoClasses> <!-- name mappings --> <nameEntry name="SHA256" class="SHA256CSP" /> <nameEntry name="SHA256CryptoServiceProvider" class="SHA256CSP" /> <nameEntry name="System.Security.Cryptography.SHA256CryptoServiceProvider" class="SHA256CSP" /> <nameEntry name="System.Security.Cryptography.SHA256" class="SHA256CSP"/> </cryptoNameMapping> </cryptographySettings> </mscorlib> |
Essa configuração basicamente força o .NET Framework, utilizado pela ferramenta SQL Server Mobile Report Publisher, a utilizar o algoritmo de criptografia SHA256 ao invés do FIPS, que é incompatível com o Reporting Services desde a versão 2005.
Recomendo criar um backup desse arquivo antes de editá-lo. Após editar o arquivo, basta reiniciar o serviço do Reporting Services para que o SQL Server Mobile Report Publisher funcione normalmente, e sem precisar desabilitar o FIPS da instância.
Uma outra solução para este problema, é seguindo os passos do post SQL Server – Como criptografar e descriptografar senhas (com Salt) utilizando o CLR (C#), onde me deparei com essa mensagem de erro ao utilizar algoritmos não compatíveis com os padrões do FIPS no SQL Server, utilizando o CLR (C#).
Espero que tenham gostado desse post que fiz em conjunto com o Tiago Neves e até o próximo post!
Abraço!
System.InvalidOperationException: Esta implementação não faz parte dos algoritmos criptográficos validados por FIPS da Plataforma Windows.
System.InvalidOperationException: Esta implementação não faz parte dos algoritmos criptográficos validados por FIPS da Plataforma Windows.