我正在尝试使用iTextSharp在使用 4.1.6 版的 ASP.NET WebForms 应用程序中生成 PDF 文档,但它在启用了 FIPS 合规性的登台服务器上引发异常。
有谁知道符合 FIPS的iTextSharp版本?
我正在尝试使用iTextSharp在使用 4.1.6 版的 ASP.NET WebForms 应用程序中生成 PDF 文档,但它在启用了 FIPS 合规性的登台服务器上引发异常。
有谁知道符合 FIPS的iTextSharp版本?
我最近需要更新一些旧iTextSharp
代码以符合 FIPS 标准——我使用了iText 7(基本上是 的最新版本iTextSharp
),它符合 FIPS 标准,并且可以在启用 FIPS 的服务器上生成 PDF。
iTextSharp
从到移植iText 7
不是很容易,主要是由于缺乏体面的文档,但更新应该可以解决任何 FIPS 合规性问题。
据我所知,主要的 FIPS 问题iTextSharp
是它使用MD5
,抛出异常(特别是在pdf.Close()
事件上),因为MD5 不是经过批准的 FIPS 散列算法。
这实际上更像是一个大评论,而不是一个答案。对于那个很抱歉...
在启用了FIPS 合规性的登台服务器上引发异常FIPS 验证加密启用。
因此,他们可能已经有效地使用了HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy
(Windows XP 和 Server 2003)或HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled
(Vista 和 Server 2008)。
或者,他们可能是通过如何限制在 Schannel.dll 中使用某些加密算法和协议手动完成的。
抛出异常...
你知道异常是什么吗?如果你知道这个异常,你也许可以在 iTextSharp 中找到它的使用。
一般来说,所有 FIPS 批准的算法和实现都在System.Security.Cryptography
并且是非托管的。(更准确地说,一些System.Security.Cryptography
类是 CAPI 调用的包装器,因为 CAPI 模块持有验证)。
因此,您可以尝试在System.Security.Cryptography
;之外寻找密码学。或在System.Security.Cryptography
但使用托管类。例如,RijndaelManaged
在这里会给你带来麻烦,并且会导致异常。
编辑:根据 KB 811833,“系统加密:使用符合 FIPS 的算法进行加密、散列和签名”安全设置效果在 Windows XP 和更高版本的 Windows 中:
Microsoft .NET Framework 应用程序(例如 Microsoft ASP.NET)仅允许使用经 NIST 认证为符合 FIPS 140 的算法实现。具体来说,唯一可以实例化的加密算法类是那些实现符合 FIPS 的算法的类。这些类的名称以“CryptoServiceProvider”或“Cng”结尾。任何尝试创建其他加密算法类的实例,例如名称以“Managed”结尾的类,都会导致发生 InvalidOperationException 异常。
我认为您可能只是在岩石和艰难的地方之间:
$ grep -R MD5 * | grep -v "\.svn"
src/core/iTextSharp/text/ImgJBIG2.cs: this.globalHash = DigestAlgorithms.Digest("MD5", this.global);
src/core/iTextSharp/text/pdf/PdfSignatureAppearance.cs: reference.Put(new PdfName("DigestMethod"), new PdfName("MD5"));
src/core/iTextSharp/text/pdf/PdfSignatureAppearance.cs: reference.Put(new PdfName("DigestMethod"), new PdfName("MD5"));
src/core/iTextSharp/text/pdf/PdfEncryption.cs: /** The message digest algorithm MD5 */
src/core/iTextSharp/text/pdf/PdfEncryption.cs: md5 = DigestUtilities.GetDigest("MD5");
...
$ grep -R MD5 * | grep -v "\.svn" | wc -l
128
和:
$ grep -R SHA1 * | grep -v "\.svn"
src/core/iTextSharp/text/error_messages/nl.lng:support.only.sha1.hash.algorithm=Enkel ondersteuning voor SHA1 hash algoritme.
src/core/iTextSharp/text/error_messages/en.lng:support.only.sha1.hash.algorithm=Support only SHA1 hash algorithm.
src/core/iTextSharp/text/pdf/PdfName.cs: public static readonly PdfName ADBE_PKCS7_SHA1 = new PdfName("adbe.pkcs7.sha1");
src/core/iTextSharp/text/pdf/PdfName.cs: public static readonly PdfName ADBE_X509_RSA_SHA1 = new PdfName("adbe.x509.rsa_sha1");
src/core/iTextSharp/text/pdf/AcroFields.cs: if (sub.Equals(PdfName.ADBE_X509_RSA_SHA1)) {
...
$ grep -R SHA1 * | grep -v "\.svn" | wc -l
188
MD5 出现在 128 个位置,SHA-1 出现在 188 个位置。这些算法隐藏在该代码中,并且可能很难甚至不可能删除它们。
您可能必须在允许弱/受伤密码的服务器上构建它,因为它似乎 MD5 和 SHA1 可能是 PDF 规范的一部分(也许 PDF 专家可以在这里提供帮助)。
FIPS 合规性已开启
关于这一点的快速说明。您要么使用经过验证的密码术,要么不使用经过验证的密码术。NIST 和 DHS 审计员对这些术语的使用非常精确。
FIPS 合规性、FIPS 合规性、FIPS 批准、FIPS 启用、FIPS <这里最喜欢的词> 没有任何意义。我知道 NIST 和 DHS 将一家供应商的网络交换机撤出美国联邦,因为该供应商的营销部门表示他们符合 FIPS 标准,而不是说他们提供了 FIPS 验证的加密技术。