如果在Windows中启用"使用FIPS兼容算法进行加密,散列和签名"安全策略选项,则尝试在.NET Framework中使用许多加密类将导致InvalidOperationException.默认情况下,ASP.NET使用AES加密ViewState blob,因此失败.您可以通过向web.config添加这样的键来解决此问题:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>
Run Code Online (Sandbox Code Playgroud)
这涵盖了ASP.NET的基本用法.我的问题是:我有一个庞大,复杂的ASP.NET Web应用程序,它大量使用ScriptManagers(ASP.NET AJAX的基础),需要由必须启用此FIPS策略设置的政府客户部署.任何带有ScriptManager的ASP.NET页面都会抛出此异常:
[InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.]
System.Security.Cryptography.SHA1Managed..ctor() +3607454
System.Security.Policy.Hash.get_SHA1() +45
System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfoInternal(Assembly assembly) +85
System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfo(Assembly assembly) +99
System.Web.Handlers.RuntimeScriptResourceHandler.GetScriptResourceUrlImpl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +525
System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +910
System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +193
System.Web.UI.ScriptReference.GetUrlFromName(ScriptManager scriptManager, IControl scriptManagerControl, Boolean zip) +306
System.Web.UI.ScriptManager.RegisterUniqueScripts(List`1 uniqueScripts) +169
System.Web.UI.ScriptManager.RegisterScripts() +407
System.Web.UI.ScriptManager.OnPagePreRenderComplete(Object sender, EventArgs e) +200
System.Web.UI.Page.OnPreRenderComplete(EventArgs e) +11041982 …Run Code Online (Sandbox Code Playgroud) 我一直致力于使我们的.NET应用程序符合FIPS,并且发现ManagedCryptography类(例如AESManaged)不符合FIPS标准.我已经阅读了其他几篇关于哪些类符合的文章和问题,例如何时C#AES算法符合FIPS标准?和http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/e0b4493f-6e20-4b75-a118-6b6e5d26a2a6.它看起来像CryptoServiceProvider类符合FIPS,但Managed类不是.
我只是想知道是否有人可以解释CryptoServiceProvider类和Managed类之间的区别?如果有人可以解释为什么这些CryptoServiceProvider类符合FIPS,但是托管类不是,所以我可以向老板解释为什么我必须重写我们的加密方法.引擎盖下它们根本不同吗?或者MS有没有让Managed类获得NIST认证?如果Managed类只包装CryptoServiceProvider类,那么为什么Managed类不能自动符合FIPS?如果我编写一个类将FIPS兼容类包装到我自己更容易使用的类中,我的软件是否不再符合FIPS?
谢谢.
我想在我的Java应用程序中实现SCP(安全复制)功能,以将文件从SSH服务器复制到另一台机器.我的Java应用程序必须符合FIPS,因此它使用SunPKCS11提供程序与底层NSS密钥数据库进行交互.
为了实现SCP功能,我们可以使用以下任何SSH库来实现Java:
关于这些SSH库我有以下问题:
以下链接似乎表明JSch不符合FIPS:
我最近在CentOS 6下启用了FIPS模块(最小安装)。
cat /proc/sys/crypto/fips_enabled 产量 1
openssl md5 somefile(失败)和openssl sha1 somefile(成功)。
openssl version 产量 OpenSSL 1.0.1e-fips 11 Feb 2013
当我尝试将ssh放入我每天连接的盒子中时,现在会看到一条说明:
FIPS完整性验证测试失败
会话继续进行,我能够连接到远程服务器。连接仍然安全吗?
我有两台CentOS 6.7机器(服务器A和B).每个系统上都安装了相同的软件包版本.
上周我在服务器A上启用了openSSH FIPS 140-2模块,该系统完美运行(包括对SQL Server实例的tsql查询).
今天我在服务器B上执行了相同的步骤(在上面的链接中).重新启动后,fips显示已启用并已测试正常 - 但tsql(对于同一SQL Server实例)已停止使用以下错误:
[serverB ~]# tsql -S egServer80 -U myusername
Password:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Error 20002 (severity 9):
Adaptive Server connection failed
There was a problem connecting to the server
Run Code Online (Sandbox Code Playgroud)
我查看日志文件并找到:
tsql: Libgcrypt warning: MD5 used - FIPS mode inactivated
Run Code Online (Sandbox Code Playgroud)
在freetds中启用调试会产生以下额外错误:
14:56:46.617196 3577 (net.c:1366):'''handshake failed: GnuTLS internal error.
Run Code Online (Sandbox Code Playgroud)
退出FIPS模块(从grub.conf中删除fips = 1)并重新启动设置回来,我又能够tsql进入我的SQL Server实例.
两个CentOS机器都使用相同的libgcrypt版本(1.4.5).
为什么(或如何)在grub中启用FIPS导致libgcrypt在这台机器上失败? 显然,机器之间的某些配置是关闭的,但我无法发现它,并且已经耗尽了资源以找到下一步的位置.
注意#1:
我可以 …
根据 Python 加密库的文档 [1],可以使用静态链接的 OpenSSL 构建自定义加密轮。我尝试使用使用 FIPS 对象模块构建的 OpenSSL 安装来执行此操作,并且能够成功构建轮子,但发现它没有 FIPS 功能(无法设置 FIPS_mode_set=1)。
我创建了一个可以重现相同结果的 Dockerfile。最后的 Python 代码应该显示“1”和“OpenSSL 1.0.2t-fips 10 Sep 2019”,但却显示“0”和“OpenSSL 1.0.2t 10 Sep 2019”(无-fips指定)。
令我困惑的是,当我调用openssl version我构建的 CLI 时,它正确地显示了带有后缀的版本-fips。因为,我猜测我在构建密码学的过程中犯了错误。
感谢这里的任何帮助!
FROM centos
# Install build dependencies
RUN yum groupinstall -y "Development Tools" && \
yum install -y python-devel libffi-devel
# Install Python dependencies
RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \
python get-pip.py && \
pip install virtualenv setuptools wheel pip
# Build Fips object …Run Code Online (Sandbox Code Playgroud) Java 12 之后,删除了内部包 com.sun.net.ssl。有什么方法可以让我以编程方式检查 JVM 上是否启用了 FIPS?
背景:什么有效
有时我们必须使用一个读取 PKCS#12 密钥库的 Java 软件。对于这个特定的项目,我们必须根据需要创建公共/私有对,并将密钥存储在 PKCS12 文件中,因为它很稳定,而且几乎所有东西都可以读取该格式。
因为我们内部做了很多 Java 工作,keytool所以我们想,嘿,只需使用 keytool 来创建私钥和证书即可。一个典型的例子如下所示:
keytool -keystore MyLuggage.p12 -storepass 123456 -storetype pkcs12
-alias "......"
-genkeypair -keyalg RSA -keysize typically_2048_or_3072 -sigalg SHA256withRSA
-ext "KeyUsage=dataEncipherment,digitalSignature,keyEncipherment"
-startdate ....
-dname "......."
Run Code Online (Sandbox Code Playgroud)
实践中实际-keysize值在 2048 到 8192 之间变化;出于这个问题的目的,使用什么似乎没有什么区别,但显然,如果我们要选择它们,我们会使用适合任务的密钥长度(通常由其他软件的约束决定,或者由交给我们的一些规定)。
这一直有效,因为其他软件(包括开头提到的 Java 软件)可以读取密钥库并使用其中的私钥。(并且公钥可以导出使用等)
这就是破坏的地方
该软件最近升级到使用 RSA 的 FIPS 140 认证 Java 库的版本。(“BSAFE”或“JSAFE”取决于您询问的人。)现在,尝试打开以前创建的 PKCS#12 文件失败,并显示
java.lang.SecurityException: Algorithm not allowable in FIPS140 mode: PBE/PKCS12/SHA1/RC2/CBC/40
at ......
at java.security.KeyStore.load(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
省略的 ...... 帧位于我们没有的 RSA 源代码中,并且希望使用在任何情况下都已被混淆的函数名称。因此,查看他们的来源并尝试找出到底是什么导致了这种情况的测试,并不是一种选择。
那么,是什么原因造成这种情况呢?我们选择的唯一算法是“RSA”密钥生成和“SHA256withRSA”签名,这两种算法都是 FIPS …
如何验证 golang dev 无聊的加密分支中的二进制文件是否启用了 fips 模式?除了内部 golang 测试之外,我没有看到简单的方法
将 BouncyCastle FIPS JSSE 和 TLS 提供程序用于我的服务器应用程序。
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcpkix-fips</artifactId>
<version>1.0.3</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bc-fips</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bctls-fips</artifactId>
<version>1.0.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
在应用程序中配置 FIPS 和 JSSE 提供程序,如下所示。
Security.insertProviderAt(new BouncyCastleFipsProvider(), 1);
Security.insertProviderAt(new BouncyCastleJsseProvider("fips:BCFIPS"), 2);
Security.setProperty("keystore.type", "BCFKS");
Run Code Online (Sandbox Code Playgroud)
SSL证书配置如下:
Server Cert - Public Key: RSA 2048 bit, Sign Algorithm: SHA256WithRSA
Issuing CA - Public Key: RSA 2048 bit, Sign Algorithm: SHA256WithRSA
Root CA - Public Key: RSA 2048 bit, Sign Algorithm: SHA1WithRSA
Run Code Online (Sandbox Code Playgroud)
使用 Zulu OpenJDK JRE 11。以下是与 TLS 相关的其他系统属性
-Djdk.tls.disabledAlgorithms="MD5, RC4, TLSv1, SSLv2Hello, …Run Code Online (Sandbox Code Playgroud)