1

我正在尝试使用iTextSharp在使用 4.1.6 版的 ASP.NET WebForms 应用程序中生成 PDF 文档,但它在启用了 FIPS 合规性的登台服务器上引发异常。

有谁知道符合 FIPS的iTextSharp版本?

4

2 回答 2

1

我最近需要更新一些旧iTextSharp代码以符合 FIPS 标准——我使用了iText 7(基本上是 的最新版本iTextSharp),它符合 FIPS 标准,并且可以在启用 FIPS 的服务器上生成 PDF。

iTextSharp从到移植iText 7不是很容易,主要是由于缺乏体面的文档,但更新应该可以解决任何 FIPS 合规性问题。

据我所知,主要的 FIPS 问题iTextSharp是它使用MD5,抛出异常(特别是在pdf.Close()事件上),因为MD5 不是经过批准的 FIPS 散列算法

于 2018-05-11T15:17:54.570 回答
0

这实际上更像是一个大评论,而不是一个答案。对于那个很抱歉...

在启用了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 验证的加密技术。

于 2014-01-31T23:24:41.280 回答