Azure web site和web job的config文件加密方式
1.分析
由于azure web appservice平台的特殊性,所以在c#中原先的config加密方法dataprotectionconfigurationprovider和rsaprotectedconfigurationprovider在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.测试网站是否可以正常运行。
上一篇: 这小腿翘的
下一篇: Android首页底部导航栏实现方式