在加密中,X.509是用于单点登录(SSO)和权限管理基础结构(PMI)的公钥基础结构(PKI)的标准。
在Go(Golang)中使用digitorus/pdfsign签署pdf文件
在 go (golang) 中,我需要签署 pdf 文档,但与其他语言不同的是,没有库可以让这项工作变得更容易。我找到了几个付费的,但它们不是一个选择。 首先,我...
将 HttpClient 与 .NET 6 C# 一起使用,我在发出 http post 请求时遇到解密错误
我遇到以下异常: System.IO.IOException:解密操作失败,请参阅内部异常。 System.ComponentModel.Win32Exception(0x80090326):收到的消息是
如何创建 ISignatureFactory 来创建自签名证书
我正在尝试使用c#生成X509Certificate2。 我发现了这个答案,这就是我正在寻找的。但是,该代码使用绝对方法。 SetSignatureAlgorithm 方法具有
我想知道如何使用python创建签名X509。 我找不到任何好的例子来解释如何使用 python 生成这样的签名。 目标是拥有一些东西
根据下面非常有用的评论,我重写了这个问题。 使用 https://www.php.net/manual/en/function.openssl-verify.php 中的代码作为示例: 根据下面非常有用的评论,我重写了这个问题。 使用https://www.php.net/manual/en/function.openssl-verify.php中的代码作为示例: <?php // $data is assumed to contain the data to be signed // fetch certificate from file and ready it $fp = fopen("path/file.pem", "r"); $cert = fread($fp, 8192); fclose($fp); // state whether signature is okay or not // use the certificate, not the public key $ok = openssl_verify($data, $signature, $cert); if ($ok == 1) { echo "good"; } elseif ($ok == 0) { echo "bad"; } else { echo "ugly, error checking signature"; } ?> 我们正在开发一个项目,我们接收包含“签名”的数据。这是数据 (UTF8) 的已知部分,已由发送者使用私有 x.509 证书和 base64 编码进行签名。作为数据的一部分,我们收到他们的 Base64 公共证书。 我们可以根据发送的信息构建“检查数据”($data),并且我们收到了$signature,因此使用上面的代码示例应该可以工作,但是...... 上面的示例从 PEM 文件中获取证书,但我们只是获得了 Base64 编码的公共证书。 以前没有使用过此类东西,如何处理 Base64 证书以便我可以将其用作上面代码中的 $cert ? 编辑: 感谢@Sammitch 对证书的澄清。我现在可以从证书访问公钥。然而,openssl_verify仍然无法验证,我想知道这是否是因为原始无符号数据是如何组合在一起的。 openssl_verify 要求 $data 是字符串,但在本例中,数据创建如下: 签名前缀是动词、目的地和日期时间戳的串联,所以类似于: POST;https://example.com/webhook;2023-10-12T20:53:50+00:00 然后将其转换为字节。 执行此操作的 VB.Net 流程是这样的: Dim signaturePrefix As String = verb + ";" + Destination + ";" + SignatureDate + ";" Dim signaturePrefixBytes As Byte() = Encoding.UTF8.GetBytes(signaturePrefix) Dim originalLength As Integer = signaturePrefixBytes.Length Array.Resize(signaturePrefixBytes, originalLength + hashBytes.Length) Array.Copy(hashBytes, 0, signaturePrefixBytes, originalLength, hashBytes.Length) 发送的 JSON 的哈希值也会转换为字节,然后合并两个字节数组。然后使用发送者的 X509 证书对该合并值进行签名。 所以...鉴于openssl_verify要求$data是一个字符串,但这是一个字节数组,我该如何使用openssl_verify来验证签名? 我们已经找到了问题的根源,并且这个解决方案有效: <?php // Obtain the necessary headers and context variables $sentSignatureBase64 = "rYYN6S87D3###REDACTED###MfVYeWA=="; $publicCertBase64 = "MIIHA###REDACTED###O0m/kRrA="; $signedTimestamp = "2023-10-16T12:00:30+01:00"; $contentHashBase64 = "PT8Zbb###REDACTED###PeZEZ3Tc="; $verb = "POST"; $destination = "https://webhook.site/###REDACTED###"; $body = "[{\"payload\":{###REDACTED###}}]"; try { // Create Certificate $public_key_pem="-----BEGIN CERTIFICATE-----\n". wordwrap($publicCertBase64, 64, "\n", false) ."\n-----END CERTIFICATE-----"; $publicCertificate = openssl_pkey_get_public($public_key_pem); echo "public_key_pem---------".PHP_EOL; echo $public_key_pem.PHP_EOL; echo "---------".PHP_EOL; echo "Key Details---------".PHP_EOL; $keyData = openssl_pkey_get_details($publicCertificate); var_dump($keyData); echo "---------".PHP_EOL; // Get bytes for the sent signature $sentSignatureBytes = base64_decode($sentSignatureBase64); // Build the signature prefix based on the received data $receivedSignaturePreifx = $verb . ";" . $destination . ";" . $signedTimestamp . ";"; echo "\$receivedSignaturePreifx = ".$receivedSignaturePreifx.PHP_EOL; // Get the SHA-256 hash of the body $body = empty($body) ? "{}" : $body; $hashBytes = hash('sha256', $body, true); // Combine the two sets of bytes $combinedBytes = $receivedSignaturePreifx . $hashBytes; // Verify the signature $isSignatureValid = openssl_verify($combinedBytes, $sentSignatureBytes, $publicCertificate, "sha256WithRSAEncryption") === 1; if (!$isSignatureValid) { $problemDetail = array( "statusCode" => 401, "detail" => "Signature failed validation.", "isSignatureValid" => $isSignatureValid ); echo json_encode($problemDetail); return; } $results = array( "detail" => "Successful verification.", "isSignatureValid" => $isSignatureValid ); echo json_encode($results); } catch (Exception $ex) { $problemDetail = array( "statusCode" => 500, "detail" => "Error while decrypting signature: " . $ex->getMessage() ); echo json_encode($problemDetail); return; } ?>
使用 Java 中的 Bouncy Castle 自签名 X509 证书
我需要使用 Java 中的 Bouncy Castle 创建自签名 X509 证书,但我尝试包含的每个类均已弃用。 我该如何解决这个问题?还有其他课程要包括吗? 谢谢
根据X.509,证书有一个属性subject。 C=美国、ST=马里兰州、L=帕萨迪纳、O=布伦特·巴卡拉、OU=FreeSoft、 CN=www.freesoft.org/[email protected] 这是典型的...
AMD-Vi:无法读取/写入 IOMMU coun / 加载 X.509 证书时出现问题 -65 [已关闭]
电脑: 联想Ideapad S145, AMD 锐龙 5 3500u。 SSD 120GB(SO) + HD1T 我最近在我的计算机上安装了 Linux Mint。而这些错误都是在启动的时候出现的。当出现这些错误并且...
有时,当用户将 x509 证书从网络剪切并粘贴到我们的系统中时,空格会在其中混淆。 是否可以安全地假设空格在 x509 证书中不是有效字符...
我需要从文件系统上的 pfx 文件获取指纹,而不提示需要手动输入的密码。 我将其作为安装程序的一部分运行,用户可以...
OpenSSL 真的需要 openssl.conf 的路径吗?
我想在 PHP 5.x 中创建自签名证书。使用我自己的(替代)openssl 配置,该配置应该由我的 PHP 代码定义。 PHP脚本将在不同的环境中运行(sha...
关于i2d_X509_REQ() api从版本1.1.1升级到3.0.5的openssl升级
我已从openssl 1.1.1升级到opessl 3.0.5。我在 i2d_X509_REQ(X509_REQ* req, nullptr) api 中获取 openssl 3.0.5 中内容的长度时遇到错误。我收到的错误是...
我想像这个js方法一样在flutter中检查证书x509的有效性。 从“tls”导入 tls; 从“加密”导入{X509Certificate} 函数有效证书(证书,密钥){ 尝试 { ...
我已经生成了公钥和私钥 Uint8ListgeneratePrivateKey(字符串输入1,字符串输入2){ // 连接输入以创建种子 字符串种子=输入1+输入2; ...
Spring Boot - 从 HTTP 请求读取 x509 客户端证书
如何从客户端接收x509证书?我正在使用 Java 的 Spring-Boot-Framework 和嵌入式 tomcat。为了进行原型设计,我使用 Java SE 进行了配置: HttpsExchange httpsExchange = (HttpsExchan...
有没有办法在应用程序级别知道用户是否在Keycloak中使用x509证书登录?
我们需要此信息来提供受限功能。如果此信息可以包含在访问令牌中,那就太好了。我们使用 Keycloak 版本 16.1.1。 我们尝试将客户证书...
找不到 X.509 证书 StoreName 'My'、StoreLocation 'LocalMachine'、FindType 'FindBySubjectName'、FindValue ''
我已将证书添加到受信任的根证书颁发机构。 但当我启动 REST 服务时,我的代码仍然给出此错误。 错误: 使用
一直在兜圈子。 花了很长时间阅读和研究。我需要使用 X.509 证书对字符串进行签名。 以下方法应该有效,但无效 导入 System.Secu...
如何从 Blazor Web Assembly 读取客户端证书数据?
我正在创建一个在内部网络中运行的 ASP.Net Core 6 Blazor Web Assembly 应用程序。用户在到达我的应用程序之前已经经过身份验证。我需要阅读信息...