仅使用 public 密钥验证签名 (C#)
Verify signature with public key only (C#)
我有两个应用程序。一个对文件进行签名,另一个进行验证。
签名应用程序执行以下操作:
X509Certificate2 certificate = new X509Certificate2(PROJECT_DIR_PATH + "cert.pfx", "password");
using (RSA rsa = certificate.GetRSAPrivateKey())
{
signature = rsa.SignData(exeContent, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
}
cert.pfx是自签名证书,用Openssl生成。
验证应用程序:
X509Certificate2 certificate = new X509Certificate2(PROJECT_DIR_PATH + "cert.pfx", "password");
using (RSA rsa = certificate.GetRSAPublicKey())
{
return rsa.VerifyData(exeContentWithoutSignature, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
}
据我所知,.pfx 文件包含 public 和私钥信息,因此我不应该将其提供给任何人。据我所知,验证步骤只需要 public 密钥。
如何在不暴露我的 pfx 文件的情况下使用 rsa.VerifyData 或其他函数来验证签名?
我已经有了可以通过这种方式生成的 .pfx 文件:
openssl req -x509 -days 365 -newkey rsa:2048 -keyout test-key.pem -out test-cert.pem
openssl pkcs12 -export -in test-cert.pem -inkey test-key.pem -out test-cert.pfx
为了提取仅包含 public 密钥的证书,可以使用以下命令:
openssl pkcs12 -in test-cert.pfx -clcerts -nokeys -out cert.pem
-clcerts - 只输出客户端证书。
-nokeys - 不输出私钥。
Cert.pem 可用于创建 X509Certificate2 的实例:
X509Certificate2 certificate = new X509Certificate2(PROJECT_DIR_PATH + "test-cert.pem");
using (RSA rsa = certificate.GetRSAPublicKey())
{
return rsa.VerifyData(exeContentWithoutSignature, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
}
我有两个应用程序。一个对文件进行签名,另一个进行验证。
签名应用程序执行以下操作:
X509Certificate2 certificate = new X509Certificate2(PROJECT_DIR_PATH + "cert.pfx", "password");
using (RSA rsa = certificate.GetRSAPrivateKey())
{
signature = rsa.SignData(exeContent, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
}
cert.pfx是自签名证书,用Openssl生成。
验证应用程序:
X509Certificate2 certificate = new X509Certificate2(PROJECT_DIR_PATH + "cert.pfx", "password");
using (RSA rsa = certificate.GetRSAPublicKey())
{
return rsa.VerifyData(exeContentWithoutSignature, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
}
据我所知,.pfx 文件包含 public 和私钥信息,因此我不应该将其提供给任何人。据我所知,验证步骤只需要 public 密钥。 如何在不暴露我的 pfx 文件的情况下使用 rsa.VerifyData 或其他函数来验证签名?
我已经有了可以通过这种方式生成的 .pfx 文件:
openssl req -x509 -days 365 -newkey rsa:2048 -keyout test-key.pem -out test-cert.pem
openssl pkcs12 -export -in test-cert.pem -inkey test-key.pem -out test-cert.pfx
为了提取仅包含 public 密钥的证书,可以使用以下命令:
openssl pkcs12 -in test-cert.pfx -clcerts -nokeys -out cert.pem
-clcerts - 只输出客户端证书。
-nokeys - 不输出私钥。
Cert.pem 可用于创建 X509Certificate2 的实例:
X509Certificate2 certificate = new X509Certificate2(PROJECT_DIR_PATH + "test-cert.pem");
using (RSA rsa = certificate.GetRSAPublicKey())
{
return rsa.VerifyData(exeContentWithoutSignature, signature, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);
}