用iTextSharp在PDF中添加数字签名
背景 我已经使用了一段时间了.我创建了一个带有两个签名PDFFORMFIELDS的PDF文档.如果我打开PDF文档,我可以手动手动签名每个字段.我希望通过ItextSharp完成此操作. 我目前正在从X509Store检索证书.到目前为止,我可以弄清楚 问题 有人可以告诉我我如何使用此x509certificate22 签署已经存在的签名Acrofield. 参考 访问了以下参考文献,我找不到我想要的答案. 签署PDF文档 这个链接使我最接近我,但是使用的几行无效,我不知道是否可以通过包括其他一些库来解决它. 解决方案 您需要的一切: appearance.SetVisibleSignature("---> ExistSignatureName
2 2023-05-22
编程技术问答社区
PowerShell获得带密码PFX文件的拇指丝
我正在尝试使用此代码获取受密码保护的PFX文件的指标: function Get-CertificateThumbprint { # # This will return a certificate thumbprint, null if the file isn't found or throw an exception. # param ( [parameter(Mandatory = $true)][string] $CertificatePath, [parameter(Mandatory = $false)][string] $CertificatePassword ) try { if (!(Test-Path $CertificatePath)) { return $null; } if ($Certifica
0 2023-05-21
编程技术问答社区
X509Certificate2 ctor with cer file
我面临着.NET中的2向SSL配置的问题. 不知何故,当我使用.cer文件和构造函数中的.cer文件和密码创建x509certificate2对象时,密码被忽略(我给出了错误的密码,并且奏效了 - 响应已成功返回). 另一方面,当我使用.p12文件时,行为是预期的(错误的密码会导致不成功的结果) 有什么想法? 谢谢. 解决方案 .cer文件包含(常见情况)仅以未加密形式的X509证书.在这种情况下,不需要密码来解码证书.我想X509Certificate2构造函数试图确定字节[]参数的编码格式,并在不需要时忽略密码参数.而且很有可能在创建后,对象的PrivateKey属性为null. 加载.cer文件时,您应该使用仅采用1个字节[]参数的构造函数.该构造函数的文档清楚地指定了受支持的数据格式: 此构造函数使用字节数组中的证书信息创建一个新的X509Certificate2对象.字节数组可以是编码的二进制(DER)或基本64编码的X.509数据.字节数组也可
2 2023-05-21
编程技术问答社区
使用主题密钥标识符创建自签名的证书
我想用RSA算法Keysize 2048使用主题密钥标识符创建一个自签名证书.我知道我们对openssl.conf进行了一些默认更改.我想改变什么? genrsa -des3 -out mcedt.key 2048 req -new -key mcedt.key -out mcedt.csr CN = server.test , OU =, O =, L = Toronto, S = ontario , C = can x509 -req -days 365 -in mcedt.csr -signkey mcedt.key -out mcedt.crt pkcs12 -export -in mcedt.crt -inkey mcedt.key -out mcedt.pfx 解决方案 您可以使用以下信息创建一个扩展文件(Extensions.cnf): subjectKeyIdentifier=hash openssl: 这确实是一个字符串扩展名,可以采用两个可
10 2023-05-11
编程技术问答社区
X.509证书。在主题替代名称中添加localhost是个好主意(还是坏主意)?
我们正在决定是否应添加" Localhost"(类似地地址为" 127.0.0.1"),作为证书中的主题替代名称之一.一个好处可能是促进当地测试.但是会有任何缺点吗? 解决方案 在主题替代名称中添加本地主机是个好主意(或不好)吗? 这取决于您遵循的标准和安全姿势. 第一件事(对于下面的讨论).必须定义一个完全合格的域名(FQDN).该定义摘自W. Richard Steven的(第189页): 以周期结尾的域名称为绝对域名或a 完全合格的域名.如果域名在一段时间内未结束,则假定需要完成名称.名称的完成方式取决于所使用的DNS软件. 这意味着我们可以通过附加一段时间将localhost更改为完全合格的域名: localhost. 这是一个小实验: $ hostname debian-q500 $ hostname --fqdn debian-q500 $ dnsdomainname $ $ ping debian-q500. pi
4 2023-05-11
编程技术问答社区
使用OpenSSL以编程方式将.PEM证书转换为.PFX
我有一个 Create a PKCS#12 file: openssl pkcs12 -export -in file.pem -out file.p12 -name "My Certificate" 这很棒,但是我想使用 openssl "> openssl 呼叫.不幸的是,OpenSSL的文档不理想. 我已经考虑使用其他库进行此操作: 使用.NET:我可以从PEM文件创建X509Certificate2对象,但这仅抓住第一个证书并忽略PEM文件中的任何中间CA. 使用 言论 此实现仅读取 来自PEM文件的证书.确实如此 没有从中读取私钥 证书文件,如果有的话. 所以,这对我没有帮助.我也需要那个私钥. 我基本上需要重新创建pem> pfx的openssl命令行工具操作,但在代码中. 有一个更简单的方法吗? 解决方案 您可以使用 bouncycastle (假设C#,因为您提到的.net). 说localhost.pem在这
0 2023-05-11
编程技术问答社区
OpenSSL和C#之间不同的S/MIME签名
我正在尝试在.NET程序中使用OPENSL代码.这是代码: openssl pkcs12 -in "My PassKit Cert.p12" -clcerts -nokeys -out certificate.pem openssl pkcs12 -in "My PassKit Cert.p12" -nocerts -out key.pem smime -binary -sign -signer certificate.pem -inkey key.pem -in manifest.json -out signature -outform DER 我尝试使用.NET OpenSSL,但我绝对不知道如何使用它,也找不到它的好文档.我决定使用.NET执行相同的符号过程,这是代码: var dataToSign = System.IO.File.ReadAllBytes(filePathToSign); ContentInfo contentInfo = new Content
0 2023-05-11
编程技术问答社区
在UWP中用X509证书'的私钥加密数据
我正在向用户展示他的个人商店中的所有可用证书,并以以下方法获取: public List GetPersonalCertificates() { var certificates = new List(); using (var store = new X509Store(StoreName.My, StoreLocation.CurrentUser)) { store.Open(OpenFlags.MaxAllowed); foreach (var certificate in store.Certificates) { if (certificate != null && certificate.HasPrivateKey) { certificates.
14 2023-04-19
编程技术问答社区
为什么自签名的PFX X509Certificate2私钥会引发一个NotSupportedException?
我创建了一个自签名的pfx x509certificate2(使用 this答案),但出于某种原因,证书的私人钥匙是正在抛出一个诺斯底型弃权,鄙视一个真正的hasprivatekey属性. string password = "MyPassword"; ECDsa ecdsa = ECDsa.Create(); CertificateRequest certificateRequest = new CertificateRequest("cn=foobar", ecdsa, HashAlgorithmName.SHA256); X509Certificate2 cert = certificateRequest.CreateSelfSigned(DateTimeOffset.Now, DateTimeOffset.Now.AddYears(5)); File.WriteAllBytes("e:\\mycert.pfx", cert.Export(X509ContentType.
12 2023-04-19
编程技术问答社区
使用X509certificate2的RSA加密和解密
所以,我需要的是: 创建开发认证,为客户端获得一个,一个用于服务器 通过从客户端编码的API检索密码并在服务器上解码 现在,我设法在此链接.那里的女孩逐步指示如何获得自我签名的认证,将其放入商店等...现在,我对: 有问题. 我已经设法使用此代码对数据进行加密: public static string Encrypt(string stringForEncription, string PathToPrivateKey) { X509Certificate2 myCertificate; try { myCertificate = new X509Certificate2(PathToPrivateKey, "Test123"); } catch (Exception e) { throw new Cryptog
18 2023-04-19
编程技术问答社区
"在为身份服务器4生成自签名证书时,"错误:23076071:PKCS12例程:PKCS12_parse:mac验证失败
我们正在开发Kubernetes上的微服务应用程序.微服务之一是IdentityServer实例.最初,我想在Docker上本地测试该解决方案,以确保其有效.为此,我想将证书复制到appsettings.json.最终,这个价值将被Kubernetes Secret取代.在我的启动课上,这是我尝试加载证书的方式: services.AddIdentityServer() .AddSigningCredential(GetIdentityServerCertificate()) .AddConfigurationStore(... private X509Certificate2 GetIdentityServerCertificate() { var clientSecret = Configuration["Certificate"]; var pfxBytes = Convert.FromBase64Str
12 2023-04-18
编程技术问答社区
是否有办法从Microsoft\Crypto\RSA\MachineKeys文件夹中导入私钥?
我希望与私钥文件夹进行互动(从本质上讲,要找到一个私钥,试图与公共密钥配对,鉴于公共密钥还没有与一个钥匙配对)certutil -repairstore功能基本上是什么我正在寻找 - 我相信能够使用代码在私钥上迭代将有助于我实现这一目标 简单地尝试读取这些文件中的所有字节,并将其作为cspblob导入到rsacryptoprovider中,这是不起作用的.给出"不良版本的提供者"错误. startInfo.FileName = "cmd.exe"; startInfo.Arguments = @"/C certutil -repairstore my " + selectedCertificate.Thumbprint; startInfo.Verb = "runas"; 是我当前的工作命令行的使用情况,但是我不想在可能的情况下使用命令行 - 这不是我可以使用或操纵的对象,它的功能与我想要结束的功能相似 解决方案 下面是小型测试代码段.在Offset 0x28
2 2023-04-12
编程技术问答社区
从X509Certificate2获取私钥时,偶尔会出现 "指定的提供者类型无效 "或 "密钥不存在 "的异常。
我在尝试从x509certificate2证书获得私钥时获得以下例外: system.security.cryptography.cryptographicexception:指定的提供商类型无效. 或 system.security.cryptography.cryptographicexception:键在以下代码中不存在:rsacryptoserviceprovider rsakey rsakey =(rsacryptoserviceprovider)digisigncert.privatekey; stacktrace: system.security.cryptography.cryptographiceception:键不存在. at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boo
如何在Mono和多个平台上用X509Certificate2正确验证SSL证书
我必须在HttpRequests和websocket>连接的非浏览器应用程序中验证几个SSL证书,该连接应在iOS,Android和Linux上运行. 当发生HTTPS的连接时,我会收到一个X509Certificate2对象的数组,其中底部是服务器证书,最高的对象是根CA(希望).例如,当我连接到https://google.com时,我会收到3 X509Certificate2,以下SubjectName.Name: 0:"CN=google.com, O=Google Inc, L=Mountain View, S=California, C=US" 1:"CN=Google Internet Authority G2, O=Google Inc, C=US" 2:"CN=GeoTrust Global CA, O=GeoTrust Inc., C=US" 我现在需要使用给定信息和以下验证验证证书验证: 信任链验证 主机名验证 证书撤销验证 我尝试过
0 2023-04-01
编程技术问答社区
使用X509Certificate2在单机加载时同时使用公钥和私钥?
现在,我尝试使用这样的x509certificate2实例化: cert = new X509Certificate2(Resources.cred); 其中Resources.cred是byte[]代表 .pfx file. 这在Windows/.NET上非常好. 但是,在 Mono Jit编译器版本3.2.8(Debian 3.2.8+DFSG-4UBUNTU1)下运行相同的代码(Ubuntu Server上的Mono 14.04 LTS),我得到以下例外: System.TypeInitializationException: An exception was thrown by the type initializer for ---> System.Security.Cryptography.CryptographicException: Unable to decode certific
2 2023-04-01
编程技术问答社区
GetClientCert在IIS托管的api上没有接收到。
我试图在Web API上手动验证证书.问题一直是GetClientCertificate只是返回null. var certRequest= actionContext.Request.GetClientCertificate(); certRequest == null ? "Certificate not found" : $"Certificate found"; iis网站就像, https://testapi.web.com 在SSL上附加的证书文件显示为DNS =*.Web.com. 还有另一个证书将其在CERT Store上归档,但没有与HTTPS绑定一起映射. dns = cl-testapi.web.com 我试图从客户端呼叫和每次接收到null的文件中提供两个证书文件. client side code: var handler = new HttpClientHandler()
6 2023-03-14
编程技术问答社区
来自商店的带私钥的X509Certificate2
我有一个X509Certificate2,带有此代码的Windows商店不可导出的私钥: X509Certificate2 oCertificato = null; X509Store my = new X509Store(StoreName.My, StoreLocation.CurrentUser); my.Open(OpenFlags.ReadOnly); System.Security.Cryptography.RSACryptoServiceProvider csp = null; foreach (X509Certificate2 cert in my.Certificates) { if (cert.SerialNumber.Trim() == cSerial) { csp = (System.Security.Cryptography.RSACryptoServiceProvider)cert.PrivateKey;
18 2023-03-14
编程技术问答社区
Xamarin Android。本机TLS,客户端WebSocket,自定义证书机构证书验证失败
客户端环境是Xamarin Android本地TLS 1.2 SSL/TLS实施( aka btls),使用system.net.websockets.clientwebsocket.这是在Android 7.0设备上运行的. Visual Studio 2017 15.8.1,Xamarin.android 9.0.0.18. 服务器环境是Windows .NET 4.7运行Fleck(WebSocket Server),该证书(全球范围内的任何地方)证书(CA)(CA)配置了TLS 1.2. 假设已通过设置 - > Security->从SD卡安装安装自制CA CERT(.pem或.cer格式),则客户端Websocket使用TLS 1.2连接无问题的TLS 1.2.由于这是解决本地问题的全球解决方案(我的应用程序的一部分),更不用说为较大的设备生态系统打开安全孔,我不希望需要此设置. 然后,我尝试了几种方法,将CA的信任本地化为仅对我的应用程序而没有成功.无论方法如何
46 2023-03-14
编程技术问答社区
客户端证书没有被添加到请求中(证书验证)。
我正在尝试使用客户证书对外部生产服务器进行简单GET请求. 他们已将我们的证书添加到他们的服务器中,我已经通过Postman(Chrome App和Windows Antive App)和标准浏览器成功提出了请求: Chrome App版本的Postman使用Chrome的内置证书查找器.本机Postman应用需要一个.crt和.key文件,我从我的.p12 file ../p> 换句话说,该证书在商店中成功找到,并且在文件中使用时也可以使用(在Windows Antive应用中,表明应该在.NET中进行). 获得C# 中的证书 在我的简单C#(.NET Framework 4.5.1)控制台应用程序中,我能够从商店(或文件)获取证书,并成功地将其用于private static X509Certificate2 GetCertificate(string thumbprint) { X509Store store = new X509Store(StoreName.M
14 2023-03-14
编程技术问答社区
X509Certificate2.Verify()总是返回错误。
面对一个非常奇怪的问题x509certificate2.verify()返回有效证书的false.也许有些人以前已经面对过这种奇怪的情况,可以照亮一些灯光. 我正在使用OpenSSL来生成客户证书进行测试. 我创建一个根CA并基于该根CA生成客户端证书,并将根CA添加到其链条中. 我将根CA和客户端证书加载到本地证书存储中,但是当我从Nunit代码加载它以测试x509certificate2.verify()时,它总是返回false. 这是从商店加载证书的代码: X509Store store = new X509Store(StoreName.My); string thumbprint = "60 d1 38 95 ee 3a 73 1e 7e 0d 70 68 0f 2d d0 69 1e 9a eb 72"; store.Open(OpenFlags.ReadOnly); var mCert
16 2023-03-14
编程技术问答社区