• 在企业正式服务器上部署产品时,遇到的2个特殊问题的原因与解决方案


    最近有2个客户在使用预定系统book和帮助台helpdesk时,出现了错误(算作很罕见吧),这里把错误的原因和对策写下来,如果你遇到这里错误

    可供参考(不代表是最佳解决方法)

    错误1:This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.

    FIPS,Federal Information Processing Standards(美国)联邦信息处理标准,错误的原因是:系统执行的加密不是FIPS的技术标准。

    当初出现这个错误第一个感觉就baidu/google一下,很快找到了解决方案,在运行里,输入组策略gpedit.msc,在安全选项里,禁用

    FIPS功能即可,我后来在自己的机器上测试都成功,但是部署到服务器上始终不行

    后来我又认为,该公司所有服务器都在域控里,所以就算服务器的策略临时改变了,但是会在下次同步时,还是会自动重置,换言之

    即使你现在更改了这个策略为“禁用”,那么服务器可能会在下次电脑重启时又自动设置为“启用”。他们可不愿意为了一个小系统而更改整个

    全公司的策略。

    接下来,再看看有没有其他的解决方法,有用户提出修改注册表regedit,在HKLM的Softeare选项里,将enforceFIPSPolicy 的值由1修改为0,做了仍然没效果

    其实,上面2个方法本质上应该是一样的,因为所谓修改策略最终执行的还是修改注册表。

    接下来又用户建议在web.config里增加

    <configuration>
        <runtime>
            <enforceFIPSPolicy enabled=”0” />
            <!-- or maybe ="false" -->
        </runtime>
    </configuration>
    

    当.NET运行时,会先检查enforceFIPSPolicy ,如果此处设置为false将不再强制使用FIPS,看似很完美,但是结果真的采用次方法时,仍然出错。后来说修改的位置放置到machine.config也不行。

    最后找到微软给的解决方案,在web.config增加machineKey,我认为他这个配置是针对加密身份证验证票cookie的,采用这个方法也不行。

        <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES" />

    原本以为10分钟能够解决的问题,折磨了一上午仍然没有解决,下午时,不再搜索,执行看了一下错误代码:

    System.Security.Cryptography.SHA1Managed

    系统是在这里出错的,想了一下,错误的原因很简单了,在我的程序里,使用了Hash值,当时为了方便使用了

    GetHash()方法,当调用次此方法时,.NET自动根据组策略FIPS来检查该方法是否是FIPS的一部分。

    既然无法修改FIPS,所以只好另行生产随机数,最后使用Guid.NewGuid(),后来程序可以运行了。

    当然,这个解决方法还是比较悬的,我这里面可以使用Guid替代Hash,如果你程序里无法用Guid替代,就不好处理了。

    第二个错误是System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values.
    Parameter name: utcDate,看错误提示是,utdDate,在helpdesk里,所有功能运行正常,但是就是axd资源无法访问。

    程序里使用了treeview控件,难道是这个控件造成的?应该不会吧,这个用在很多项目都没有出错,因此自己查看了一下错误的原因:

    System.Web.HttpCachePolicy.UtcSetLastModified(DateTime utcDate)

    是在缓存里出现了错误,该用户使用的是windows2008,后来在日期里发现了客户启用了“自动到internet服务器上同步时间”功能。

    看到这里,我后来禁用了此功能,然后运行helpdesk仍然不可以,最后我手动把今天的日期修改为明天,再访问就正常了,最后又修改为今天的日期

    也可以了。

    后来感觉的原因是,系统使用了缓存,例如当前服务器是2012.2.28 18:00时,用户访问了helpdesk,缓存的时间就是2012.2.28 18:00,当下一个用户访问时

    UtcSetLastModified的值一定是在这个时间之前。但是可能是用户的标准时间快了而服务器又启用了自动到internet同步标准时间“绝对时间”,导致同步后的时间可能是2012.2.28日 17:59分,这样,UtcSetLastModified获取的最新修改时间反而是“将来的时间”,因此出错。

    因此通过将日期更改为明天,将缓存重置后,再修改回来即可。

  • 相关阅读:
    (3)梯度下降法Gradient Descent
    特征工程
    python小笔记
    衡量线性回归法的指标MSE, RMSE,MAE和R Square
    最小二乘法
    最优化原理,凸优化
    线性回归Linear regression
    机器学习流程
    数据归一化Feature Scaling
    kafka重新设置group的offset
  • 原文地址:https://www.cnblogs.com/mqingqing123/p/2372047.html
Copyright © 2020-2023  润新知