我正在尝试使用 iTextSharp 在我的ASP.NET WebForms应用程序中使用版本4.1.6生成PDF文档,但它在启用了FIPS兼容性的登台服务器上引发了异常。
是否有人知道符合FIPS标准的 iTextSharp 版本?
答案 0 :(得分:0)
这实际上更像是一个重要的评论,而不是一个答案。对不起...
在启用了
FIPS合规性的登台服务器上抛出异常启用FIPS验证加密。
因此,他们可能使用了HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy
(Windows XP和Server 2003)或HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled
(Vista和Server 2008)。
或者,他们可能是通过How to restrict the use of certain cryptographic algorithms and protocols in Schannel.dll手工完成的。
抛出异常......
你知道异常是什么吗?如果你知道异常,你可以在iTextSharp中找到它的使用。
一般来说,所有FIPS认可的算法和实现都在System.Security.Cryptography
中,而是非托管的。 (更准确地说,一些System.Security.Cryptography
类是CAPI调用的包装器,因为CAPI模块持有验证。)
所以你可以尝试在System.Security.Cryptography
中找到cryptograhy not ;或者在System.Security.Cryptography
内但使用托管类。例如,RijndaelManaged
会让您遇到麻烦,并且会导致出现。
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验证加密。