Tag: 证书

如何使用Windows Cert Store中的证书签署PDF文档?

我需要使用Windows证书库中存在的证书来签署PDF文档。 我整天都在努力想弄明白,我离 这么远很近 。 所有缺少的是: 如何获取IExternalSignature对象来签署PDF文件? Rahul Singla写了一个很好的例子,说明如何使用新的iText 5.3.0 API签署PDF文档 – 只要你可以在某个地方访问PC上的.pfx文件。 有一个关于使用Windows证书存储区中的证书进行签名的问题 ,除了它使用的是仍然存在SetCrypto的API版本,并且签名显然是可选的。 在iText 5.3.0中,API已经改变,而SetCrypto不再是一件事。 以下是我到目前为止所做的评论(为后代添加了评论,因为这可能是如何在’网络上执行此操作的最完整和最新版本): using iTextSharp.text.pdf; using iTextSharp.text.pdf.security; using BcX509 = Org.BouncyCastle.X509; using Org.BouncyCastle.Pkcs; using Org.BouncyCastle.Crypto; using DotNetUtils = Org.BouncyCastle.Security.DotNetUtilities; … // Set up the PDF IO PdfReader reader = new PdfReader(@”some\dir\SomeTemplate.pdf”); PdfStamper stamper = PdfStamper.CreateSignature(reader, new FileStream(@”some\dir\SignedPdf.pdf”, FileMode.Create), ‘\0’); PdfSignatureAppearance sap […]

无法创建SSL / TLS安全通道 – 问题可能是代理服务器吗?

我有一个ac#app,它调用一个使用证书进行身份validation的Web服务方法。 该代码有效,因为当它安装在服务器A(没有代理)时,它进行身份validation。 当我在服务器B上安装代码时,在客户端站点上,它安装在代理后面。 我几乎尝试了所有的东西,但我一直收到这个错误: 无法创建SSL / TLS安全通道 您是否认为此问题可能是由代理服务器引起的? 如果您对此有任何亲身经历,请分享。 谢谢

使用证书身份validation访问Web服务和HTTP接口

这是我第一次使用证书身份validation。 商业合作伙伴公开两种服务,XML Web服务和HTTP服务。 我必须使用.NET客户端访问它们。 我试过的 0.设置环境 我已使用certmgr.exe在本地计算机(win 7 professional)中安装了SSLCACertificates(在root和两个中间)和客户端证书。 1.对于Web服务 我有客户证书(der)。 该服务将通过.NET代理使用。 这是代码: OrderWSService proxy = new OrderWSService(); string CertFile = “ClientCert_DER.cer”; proxy.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(CertFile)); orderTrackingTO ot = new orderTrackingTO() { order_id = “80”, tracking_id = “82”, status = stateOrderType.IN_PREPARATION }; resultResponseTO res = proxy.insertOrderTracking(ot); 最后一条语句报告的exception: The request failed with an empty response 。 2.对于HTTP接口 它是我必须通过POST方法调用的HTTPS接口。 […]

如何以编程方式为WCF服务创建自签名证书?

我有一个自托管的WCF服务器作为本地系统帐户下的Windows服务运行。 我正在尝试以编程方式在c#中创建自签名证书,以便使用消息级别安全性与net.tcp端点一起使用。 我使用以下代码,它非常基于如何使用C#创建自签名证书中的接受答案? 试图解决我的问题的一些小变化。 public static X509Certificate2 CreateSelfSignedCertificate(string subjectName, TimeSpan expirationLength) { // create DN for subject and issuer var dn = new CX500DistinguishedName(); dn.Encode(“CN=” + subjectName, X500NameFlags.XCN_CERT_NAME_STR_NONE); CX509PrivateKey privateKey = new CX509PrivateKey(); privateKey.ProviderName = “Microsoft Strong Cryptographic Provider”; privateKey.Length = 1024; privateKey.KeySpec = X509KeySpec.XCN_AT_KEYEXCHANGE; privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_DECRYPT_FLAG | X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_KEY_AGREEMENT_FLAG; privateKey.MachineContext = true; privateKey.ExportPolicy = […]

ASP.NET – 指定的网络密码不正确

我在我的开发机器上有一个需要证书的WCF客户端,它工作正常。 部署到生产服务器后,我收到以下错误: [CryptographicException: The specified network password is not correct.] DEV – Win7 32BIT IIS 7.5 生产 – Win SERVER 64BIT 2008 IIS 7.5 即使网络之间没有密码也没有证书密码。 (我知道因为开发工作没有密码)。 我唯一的密码是WCF,它与DEV相同。 CrmServiceClient crm = new CrmServiceClient(“CrmServiceEndpoint”); crm.ClientCredentials.UserName.UserName = CrmConfigRepository.CrmUserName;//fine crm.ClientCredentials.UserName.Password = CrmConfigRepository.CrmPassword;//fine crm.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(Path); ///THIS WONT WORK AS WELL crm.ClientCredentials.ClientCertificate.Certificate = new X509Certificate2(Path, “”, X509KeyStorageFlags.Exportable); 这是完整的堆栈 [CryptographicException: […]

在c#中使用ECDSA生成证书

我正在尝试使用ECDSA生成带有私钥的(自签名)证书。 目标是获得与使用openssl时“相同”(pkcs12)的证书: openssl ecparam -genkey -name secp256r1 -out mykey.key openssl req -new -key mykey.key -out myreq.csr openssl req -x509 -days 7 -key mykey.key -in myreq.csr -out mycert.crt openssl pkcs12 -export -out mycert.pfx -inkey mykey.key -in mycert.crt 我已经使用BouncyCastle帮助我创建基于RSA的证书,因此接下来的步骤或多或少都遵循我用来创建RSA证书的方式。 (请注意, BC前缀用于来自BouncyCastle的类, MS用于.NET类) 1生成密钥对:私钥和公钥 BC.IAsymmetricCipherKeyPairGenerator bcKpGen = BC.GeneratorUtilities.GetKeyPairGenerator(“ECDSA”); bcKpGen.Init(new BC.ECKeyGenerationParameters(BC.SecObjectIdentifiers.SecP256r1, new BC.SecureRandom())); BC.AsymmetricCipherKeyPair bcSubjKeys = bcKpGen.GenerateKeyPair(); 2使用私钥与一些额外的数据(主题,有效期等)签署公钥 BC.X509V3CertificateGenerator […]

SSLStream示例 – 如何获取有效的证书?

我在这里使用msdn的SSLStream示例。 客户端代码“似乎”工作正常,因为我可以连接到谷歌,它至少得到过去的身份validation,但服务器没有。 从msdn页面的评论中,我使用此页面上的过程生成我自己的私钥,但它不起作用。 我得到System.NotSupportedException: The server mode SSL must use a certificate with the associated private key.的exceptionSystem.NotSupportedException: The server mode SSL must use a certificate with the associated private key. 所以我很确定我所做的一切都是错的。 所以我的问题很简单:如何从msdn获取/生成适用于我自己的小示例程序的密钥? 无论如何,它都可以是自签名的,但我对SSL来说太新了,甚至不知道我到底需要什么。 我想要做的就是运行as-given示例,除了为我的本地服务器指定自己的证书。 如果我只是想在他们两个之间进行通信,那么知道我必须在我的第二台机器上安装什么是很好的(所以它不是100%本地主机的例子)。 我个人认为这是示例文档中的一个缺陷。 它应该说“要运行它,你需要做A,B,C等”,但事实并非如此。

如何在Webbrowser控件中禁用“安全警报”窗口

我正在使用Webbrowser控件使用“不受信任的证书”登录HTTPS站点。 但我得到一个关于不受信任的证书的弹出窗口“安全警报”: 我必须按标题找到这个窗口并发送Alt + Y按是 : int iHandle = NativeWin32.FindWindow(null, “Security Alert”); NativeWin32.SetForegroundWindow(iHandle); System.Windows.Forms.SendKeys.Send(“Y%”); 但用户可以看到此窗口的闪烁。 如何忽略此警报? 或者在Webbrowser控件中禁用此“不受信任的证书”检查?

在Root中插入证书(带私钥),LocalMachine证书存储在.NET 4中失败

我在localmachine的根证书存储中插入带有私钥的新CA证书时遇到问题。 这是发生的事情: //This doesn’t help either. new StorePermission (PermissionState.Unrestricted) { Flags = StorePermissionFlags.AddToStore }.Assert(); var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine); privkey.PersistKeyInCsp = true; //This shouldn’t be necessary doesn’t make a difference what so ever. RSACryptoServiceProvider.UseMachineKeyStore = true; cert.PrivateKey = privkey; store.Open (OpenFlags.MaxAllowed); store.Add (cert); store.Close (); 证书被插入,它看起来都很花哨:(见!) 注意:据说它有私钥。 所以你会说用FindPrivateKey可以找到它 C:\Users\Administrator\Desktop>FindPrivateKey.exe Root LocalMachine -t “54 11 […]

从.NET中的Authenticode签名文件中获取时间戳

我们需要validation二进制文件是否使用数字签名(Authenticode)正确签名。 这可以通过signtool.exe轻松实现。 但是,我们需要一种自动方式来validation签名者名称和时间戳。 这在使用CryptQueryObject() API的本机C ++中是可行的,如以下精彩示例所示: 如何从Authenticode签名的可执行文件获取信息 然而,我们生活在一个托管的世界:)因此寻找相同问题的C#解决方案。 直接的方法是pInvoke Crypt32.dll,一切都完成了。 但是System.Security.Cryptography.X509Certificates命名空间中有类似的托管API。 X509Certificate2类似乎提供了一些信息但没有时间戳。 现在我们来看原始问题,我们如何才能在C Sharp中获得数字签名的时间戳?