SLES 12.1 上的 mod_mono 无法加密 ASP.Net web.config

SLES 12.1 上的 mod_mono 无法加密 ASP.Net web.config

我正在尝试将 ASP.Net (2.0) VB Web 应用程序从 SLES 11 服务器迁移到新的 SLES 12 服务器。不幸的是,Novell / SUSE / NetIQ 人员不再支持 mono。

这是我第一次开发 mono / mod_mono Apache 组合。这是一次很好的学习经历。我不确定我是否已正确排列所有内容(单声道版本/存储库/配置)。自 Visual Studio 2008 以来发生了很多变化。我希望前 Novell 或其他 Mono 专家可以帮助我解决问题。

因此,经过一番努力,我设法获得了一个可行的解决方案,但我似乎无法加密 web.config。保护调用不会生成加密的 web.config connectionStrings 部分,而是会占用文件的大部分内容,并给出包含以下消息的错误页面

System.Xml.XmlException

根元素缺失。

难怪网络配置减少到......

<?xml version="1.0" encoding="utf-8"?>
<configuration><appSettings>
  </appSettings></configuration>

?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
  </appSettings>
  <connectionStrings>
    <add name="websalesConnectionString" connectionString="server=192.168.85.15;User Id=zzzz;password=zzzz;Persist Security Info=True;database=websales" providerName="MySql.Data.MySqlClient"/>
  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="MySql.Data.MySqlClient" />
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.6.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
    </DbProviderFactories>
  </system.data>
  <system.web>
    <authentication mode="Windows" />
    <httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
    <compilation debug="true" strict="false" explicit="true">
      <assemblies>
        <add assembly="*" />
      </assemblies>
    </compilation>
    <customErrors mode="Off" />
    <pages>
      <namespaces>
        <clear />
        <add namespace="System" />
        <add namespace="System.Collections" />
        <add namespace="System.Collections.Generic" />
        <add namespace="System.Collections.Specialized" />
        <add namespace="System.Configuration" />
        <add namespace="System.Text" />
        <add namespace="System.Text.RegularExpressions" />
        <add namespace="System.Web" />
        <add namespace="System.Web.Caching" />
        <add namespace="System.Web.SessionState" />
        <add namespace="System.Web.Security" />
        <add namespace="System.Web.Profile" />
        <add namespace="System.Web.UI" />
        <add namespace="System.Web.UI.WebControls" />
        <add namespace="System.Web.UI.WebControls.WebParts" />
        <add namespace="System.Web.UI.HtmlControls" />
      </namespaces>
    </pages>
  </system.web>
</configuration>

这是调用进行加密的方法(文件吞噬)

Public Sub webencrypt(ByVal lEncrypt As Boolean)
    Dim config As Configuration = WebConfigurationManager.OpenWebConfiguration("~")
    Dim configSection As ConfigurationSection = config.GetSection("connectionStrings")
    If lEncrypt Then
        If Not configSection.SectionInformation.IsProtected Then
            configSection.SectionInformation.ProtectSection("RsaProtectedConfigurationProvider")
            config.Save()
        End If
    End If          
End Sub

我努力了代码来自:http://www.developersalley.com/blog/post/2011/11/22/How-To-Protect-Webconfig-File.aspx

以及来自: http://devproconnections.com/aspnet/encrypting-configuration-file-sections

版本信息

  • Apache2 (2.4.16)
  • Apache2-mod-mono (3.12-1)
  • 单声道 (4.2.2.30)
  • ASP.NET (2.0)

mod-mono-serverX.exe

另一个谜团是 mod-mono-server2.exe 错误出现在 apache 日志中。 为什么要调用 mod-mono-server2.exe(其包装在 /usr/bin 中)?

无法打开程序集“/usr/lib/mono/2.0/mod-mono-server2.exe”:没有此文件或目录。

我专门使用 apache mod_mono 指令 MonoServerPath 来调用 mod-mono-server4.exe。

... MonoServerPath webtest "/usr/bin/mod-mono-server4" ...

哪个调用

/usr/lib/mono/4.5/mod-mono-server4.exe

这指向

mod-mono-server4.exe -> ../gac/mod-mono-server4/4.2.0.0__0738eb9f132ed756/mod-mono-server4.exe

mod-mono-server2.exe 未随最新的 mono AFAIK 一起安装。需要进行许多组合/测试才能弄清楚这一点,因为文档仍然引用 ASP 1 的 mod-mono-server 和 ASP 2 的 mod-mono-server2 .... 而没有提及 mod-mono-server4。

我可以忽略这些错误和/或将单声道包装器重新指向所有指向 mod-mono-server4 的...但这也感觉不对。

相关内容