欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Azure web site和web job的config文件加密方式

程序员文章站 2022-05-16 16:16:59
1.分析 由于Azure Web AppService平台的特殊性,所以在C#中原先的config加密方法DataProtectionConfigurationProvider和RSAProtectedConfigurationProvider在Azure平台上面是无法使用的,会在发布一段时间后失效 ......

1.分析

由于azure web appservice平台的特殊性,所以在c#中原先的config加密方法dataprotectionconfigurationproviderrsaprotectedconfigurationprovider在azure平台上面是无法使用的,会在发布一段时间后失效或者无法解密,所以推荐在azure上采用证书的方式加密和解密config配置文件(在azure门户中的应用设置中的应用设置和连接字符串是采用静态加密的,如果只是针对webapp的话推荐采用上述方式)。

2.解决方法

1.创建加密证书,使用powershell工具在windows机器上创建证书,命令如下(powershell需要以管理员的方式运行)

$cert = new-selfsignedcertificate -type documentencryptioncert -subject "cn=devconfig" -keyexportpolicy exportable -keyspec keyexchange

export-certificate -cert $cert -filepath ".\devconfig.cer"

$mypwd = convertto-securestring -string "1234" -force -asplaintext

export-pfxcertificate -cert $cert -filepath ".\devconfig.pfx" -password $mypwd
$cert

使用export-certificate命令将加密证书导出为“.cer”文件,使用export-pfxcertificate将解密证书导出为“.pfx”文件,最后的命令是用来查看证书的指纹的。

2.将加密证书导入windows

import-certificate -filepath ".\devconfig.cer" -certstorelocation cert:\localmachine\my

3.将解密证书导入到windows

$mypwd = convertto-securestring -string "1234" -force -asplaintext

import-pfxcertificate -filepath ".\devconfig.pfx" -certstorelocation cert:\localmachine\my -password $mypwd

4.设置用于加密的web.config文件,如果是webjob的话需要把app.config改成web.config

在nuget中下载webconfigencrypter这个包,添加到项目中,将下面的内容添加到webconfig中,将指纹的值改成之前生成的证书的指纹的值

<configuration>
  [...]
  <configprotecteddata>
    <providers>
      <add name="pkcs12provider" thumbprint="1234123412341234123412341234123412341234" type="webconfigencrypter.pkcs12protectedconfigurationprovider, webconfigencrypter" storelocation="localmachine"/>
    </providers>
  </configprotecteddata>

5.加密web.config中的节点(appsettings和connection strings)

打开visual studio命令行代码(在开始菜单程序中找到vs里面就有这个命令行快捷方式),在里面输入下列代码

aspnet_regiis -pef "connectionstrings" "webconfig所在的绝对路径" -prov "pkcs12provider"

如果执行命令出错,运行where aspnet_regiis命令,将下面的这三个dll放到运行命令后出来的文件夹中。

  • webconfigencrypter.dll
  • system.configuration.configurationmanager.dll
  • system.security.cryptography.xml.dll

 

加密后的web.config如下图所示

<connectionstrings configprotectionprovider="pkcs12provider">
    <encrypteddata type="http://www.w3.org/2001/04/xmlenc#element"
      xmlns="http://www.w3.org/2001/04/xmlenc#">
      <encryptionmethod algorithm="http://www.w3.org/2001/04/xmlenc#aes192-cbc" />
      <keyinfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <encryptedkey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <encryptionmethod algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <keyinfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <keyname>rsakey</keyname>
          </keyinfo>
          <cipherdata>
            <ciphervalue>moy/a2xo2zvnn/hzw53dyc8aajwo16+0kmnpc4scsmuqzu0rt+hnfea33pagczve+m6mtarzhx6jvvroavpsnzfyg1bu1z7a1ynbw4ogxrmyyfdww6czqz57dznl6ysalkj5wlqpdgupja6fv/htic3x4fjyy5vdsucmo6x3opuo1998lwnkl6fis4wkjkg/sofbi2qx3hhogdn670jdhkndon1z7bfhhlnyvj7rto3xuqn9kf4pqbftvwm1byxtbzpdnxu/fcxzkonsau8hn3qx5vtryp/i4bg+nk7tuig3gxd4tq9gr7assgkjyt02piceo0jpyyibhz9xbck9kw==</ciphervalue>
          </cipherdata>
        </encryptedkey>
      </keyinfo>
      <cipherdata>
        <ciphervalue>tev0yjaflehpyzulqog7m3o7sfq7ug3ndgmhxiporwoesri+zvt1ni7arefofwgnw4ceaolo4mky2kwr4zgk+6rawomx1iryhewtf7z/8+cigoqsrxlygekdqbevowku0y6tawtpu0zm3bp5pvkaztbnthggnrgymigaufu5rzw1gwpthyl2iwdaku9iaf+aopa/gsvovtzmnfj1rwy6u8pto0h0ws/pdkcokuxgkx31t/y32ivfoy7xypnpt/z/anmihvbo7faqawuj/nsg9g1ffrrhcqc73tusrdkhvuf17bep526rg6rbztm3f3v3o0d8/slmyrni9tffksb4qcwin4p+brtgr0iacmbfbovafsozfuyxjmpx+bypopd1pf4fmfokxxkejyy31xqzoqlp75rgmwhwym8urhq4cjs=</ciphervalue>
      </cipherdata>
    </encrypteddata>
  </connectionstrings>

6.将加密成功后的应用发布到azure上,发布之前将web.config中配置加密的节点改成如下,将storelocation的值变为当前用户

<add name=“pkcs12provider” thumbprint=“1234123412341234123412341234123412341234" type=“webconfigencrypter.pkcs12protectedconfigurationprovider, webconfigencrypter” storelocation=“currentuser”/>

7.在azur中上传刚才生成好的pfx证书

8.在azure的应用设置中加入key为website_load_certificates,value为*的键值对,让webapp可以读取应用的证书。

9.测试网站是否可以正常运行。