从证书

时间:2016-12-27 06:37:27

标签: c# certificate sha256 x509certificate2

目前,我正致力于客户端服务器应用程序(Chat)实现服务器和客户端的安全性,很少客户端是用java SMACK库编写的,他们使用TLS Pining for JAVA需要sha2 hash [https://github.com/Flowdalic/java-pinning][1]

服务器是使用C#实现的,我在服务器端有证书如何从证书中获取格式如下的sha2公钥,下面是我的代码。

cer =new X509Certificate2(ConfigurationManager.AppSettings["CertificateName"],"123456");

string hellow= cer.GetCertHashString(); //it will return sha1 hash 

我需要的是以下格式和证书中的sha2-256密钥 SHA2-256密钥

  

83:F9:17:1E:06:A3:13:11:88:89:F7:D7:93:02:BD:1B:7A:20:42:EE:0C:FD:02:9A :BF:8D:D0:6F:FA:6C:D9:D3

1 个答案:

答案 0 :(得分:2)

我找到了问题的解决方案,让我分享。

如果您想获得证书的SHA256指纹,您必须做一些手动工作。内置Thumbprint属性仅限SHA1。

哟必须使用SHA256类并计算证书内容的哈希值:

using System;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;

namespace MyNamespace {
    class MyClass {
        public static String GetSha2Thumbprint(X509Certificate2 cert) {
            Byte[] hashBytes;
            using (var hasher = new SHA256Managed()) {
                hashBytes = hasher.ComputeHash(cert.RawData);
            }
            return BitConverter.ToString(hashBytes).Replace("-", ":");
        }
    }
}