рдкреНрд░рд╛рдЧрд┐рддрд┐рд╣рд╛рд╕
рдореБрдЭреЗ рд╕реАрдЖрдИ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд╛ рдХрд╛рдо рдорд┐рд▓рд╛ред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЧреЛрдкрдиреАрдп рдбреЗрдЯрд╛ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЖрдк рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░
рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдВрдбреЛрдЬ рдУрдПрд╕ рдореЗрдВ рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рдЪрд╛рдмрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдХреБрдВрдЬреА рдпрд╛ рддреЛ рдЦрд╛рддреЗ рдкрд░ рдпрд╛ рдорд╢реАрди рдкрд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред рдорд╢реАрди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреАрдЬрд╝ рдХреЛ рдЗрд╕ рдкрде C: \ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рдЖрдЧреЗ рдмрдирд╛рдПрдВрдЧреЗ рдХреБрдВрдЬреАред
рдкреНрд░рдореБрдЦ рдирд┐рд░реНрдорд╛рдг
рд╣рдо рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рд╕реЗ cmd рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ aspnet_regiis рдХреЗ рд╕рд╛рде рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ C рд╣реИ: \ Windows \ Microsoft.NET \ рдлреНрд░реЗрдорд╡рд░реНрдХ 64 \ v4.0.30319
рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ
aspnet_regiis -pc "TestKey" -exp
exp - рдЗрд╕рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреБрдВрдЬреА рдирд┐рд░реНрдпрд╛рдд рдХрд░ рд╕рдХреЗрдВ
TestKey - рд╣рдорд╛рд░реЗ рдореБрдЦреНрдп рдХрдВрдЯреЗрдирд░ рдХрд╛ рдирд╛рдо
рдореБрдЦреНрдп рдирд┐рд░реНрдпрд╛рдд
рдЯреАрдо
aspnet_regiis -px "TestKey" :\TestKey.xml -pri
TestKey - рдирд╛рдо рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░
C: \ TestKey.xml - рд╡рд╣ рдкрде рдЬрд╣рд╛рдБ рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЬрд╛рдПрдЧреА
pri - рдирд┐рд░реНрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдЬреА рдХреБрдВрдЬреА рдЬреЛрдбрд╝реЗрдВ
рдЖрдпрд╛рдд рдХреБрдВрдЬреА
рдЯреАрдо
aspnet_regiis -pi "TestKey" :\TestKey.xml
TestKey - рдирд╛рдо рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░
C: \ TestKey.xml - рд╡рд╣ рдкрде рдЬрд╣рд╛рдБ рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЬрд╛рдПрдЧреА
рдЕрдзрд┐рдХрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛
рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдпрд╛ IIS рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрд╣ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
aspnet_regiis -pa "TestKey" "NT AUTHORITY\NETWORK SERVICE"
TestKey - рдирд╛рдо рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░
NT AUTHORITY \ NETWORK рд╕реЗрд╡рд╛ - рдЬрд┐рд╕реЗ рдХреБрдВрдЬреА рддрдХ рдкрд╣реБрдБрдЪ рджреА рдЬрд╛рдПрдЧреА
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, IIS рдореЗрдВ рдкреВрд▓ рдХреЗ рд▓рд┐рдП ApplicationPoolIdentity рд╣реИред
Microsoft рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг (рд▓рд┐рдВрдХ 2 рджреЗрдЦреЗрдВ) ApplicationPoolIdentity рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ:
ApplicationPoolIdentity : рдЬрдм рдПрдХ рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ IIS рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдЦрд╛рддрд╛ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд▓ рдХрд╛ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЬреЛ рдЗрд╕ рдЦрд╛рддреЗ рдХреЗ рддрд╣рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреВрд▓ рдХрд╛рд░реНрдпрдХрд░реНрддрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд▓рд╛рддрд╛ рд╣реИред рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░ рд╡рд╛рд▓рд╛ рдЦрд╛рддрд╛ рднреА рд╣реИред
рдЗрд╕рд▓рд┐рдП, IIS рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рдЪрд╛рди рдХреЛ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП рдкреВрд▓ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдЖрдк "рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗрд╡рд╛" рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдзрд┐рдХрд╛рд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрднрд╛рдЧ рдЬреЛрдбрд╝рдирд╛
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider"> <providers> <add name="CustomRsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="TestKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/> </providers> </configProtectedData>
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореБрдЦреНрдп рдХрдВрдЯреЗрдирд░ рдФрд░ RsPProtectedConfigurationProvider рдХреЛ рд╡рд┐рд╢реНрд╡ рд╕реНрддрд░ рдкрд░ рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config, C: \ Windows \ Microsoft.NET \ рдлреНрд░реЗрдорд╡рд░реНрдХ 64 \ v4.0.30319 \ config \ machine.config
<configProtectedData defaultProvider="RsaProtectedConfigurationProvider"> <providers> <add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/> <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy=""/> </providers> </configProtectedData>
= "System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, рд╕рдВрд╕реНрдХрд░рдг = 4.0.0.0, рд╕рдВрд╕реНрдХреГрддрд┐ = рддрдЯрд╕реНрде, PublicKeyToken = b03f5f7f11d50a3a" рд╡рд┐рд╡рд░рдг = "рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП RsaCryptoServiceProvider рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ" keyContainerName = "NetFrameworkConfigurationKey" cspProviderName <configProtectedData defaultProvider="RsaProtectedConfigurationProvider"> <providers> <add name="RsaProtectedConfigurationProvider" type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses RsaCryptoServiceProvider to encrypt and decrypt" keyContainerName="NetFrameworkConfigurationKey" cspProviderName="" useMachineContainer="true" useOAEP="false"/> <add name="DataProtectionConfigurationProvider" type="System.Configuration.DpapiProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" description="Uses CryptProtectData and CryptUnProtectData Windows APIs to encrypt and decrypt" useMachineProtection="true" keyEntropy=""/> </providers> </configProtectedData>
рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди
рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди
aspnet_regiis.exe -pef connectionStrings :\Site -prov "CustomRsaProtectedConfigurationProvider"
C: \ Site - рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдкрдеред
CustomRsaProtectedConfigurationProvider - рд╣рдорд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдХреБрдВрдЬреА рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдПрдХ рд▓рд┐рдЦрд┐рдд рдЖрд╡реЗрджрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди
private static string provider = "CustomRsaProtectedConfigurationProvider"; public static void ProtectConfiguration() { Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); ConfigurationSection connStrings = config.ConnectionStrings; if (connStrings != null && !connStrings.SectionInformation.IsProtected && !connStrings.ElementInformation.IsLocked) { connStrings.SectionInformation.ProtectSection(provider); connStrings.SectionInformation.ForceSave = true; config.Save(ConfigurationSaveMode.Full); } } public static void UnProtectConfiguration(string path) { Configuration config = ConfigurationManager.OpenExeConfiguration(path); ConfigurationSection connStrings = config.ConnectionStrings; if (connStrings != null && connStrings.SectionInformation.IsProtected && !connStrings.ElementInformation.IsLocked) { connStrings.SectionInformation.UnprotectSection(); } }
рдмрд╛рдЗрдХ
рдЬрдм рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рд╕рдВрдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдЙрдкрдпреБрдХреНрдд рд╣реЛрддрд╛ рд╣реИред рд╣рдо RsaProtectedConfigurationProvider рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ, xml рд╕реЗ рдПрдХ рдиреЛрдб рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрд▓рдЧ рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдиреЛрдб рдХреЛ рд╣рдорд╛рд░реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдПрдХ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдореВрд▓ xml рдореЗрдВ рдмрджрд▓реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реЗрдЬреЗрдВред
public void Protect(string filePath, string sectionName = null) { XmlDocument xmlDocument = new XmlDocument { PreserveWhitespace = true }; xmlDocument.Load(filePath); if (xmlDocument.DocumentElement == null) { throw new InvalidXmlException($"Invalid Xml document"); } sectionName = !string.IsNullOrEmpty(sectionName) ? sectionName : xmlDocument.DocumentElement.Name; var xmlElement = xmlDocument.GetElementsByTagName(sectionName)[0] as XmlElement; var config = new NameValueCollection { { "keyContainerName", _settings.KeyContainerName }, { "useMachineContainer", _settings.UseMachineContainer ? "true" : "false" } }; var rsaProvider = new RsaProtectedConfigurationProvider(); rsaProvider.Initialize(_encryptionProviderSettings.ProviderName, config); var encryptedData = rsaProvider.Encrypt(xmlElement); encryptedData = xmlDocument.ImportNode(encryptedData, true); var createdXmlElement = xmlDocument.CreateElement(sectionName); var xmlAttribute = xmlDocument.CreateAttribute("configProtectionProvider"); xmlAttribute.Value = _encryptionProviderSettings.ProviderName; createdXmlElement.Attributes.Append(xmlAttribute); createdXmlElement.AppendChild(encryptedData); if (createdXmlElement.ParentNode == null || createdXmlElement.ParentNode.NodeType == XmlNodeType.Document || xmlDocument.DocumentElement == null) { XmlDocument docNew = new XmlDocument { InnerXml = createdXmlElement.OuterXml }; docNew.Save(filePath); } else { xmlDocument.DocumentElement.ReplaceChild(createdXmlElement, xmlElement); xmlDocument.Save(filePath); } }
рд╕рдВрджрд░реНрдн
1.
docs.microsoft.com/en-us/previous-versions/53tyfkaw2.
support.microsoft.com/en-za/help/4466942/understanding-identities-in-iis