You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取证书的Base64编码SHA-256哈希值用于证书固定?

获取ECC证书Base64编码SHA-256哈希的可靠方法

方法一:修正OpenSSL命令(解决GitBash报错)

你之前的OpenSSL命令大概率是输入时出现乱码或格式错误,针对ECC证书,正确步骤如下:

  1. 抓取目标网站证书并保存为PEM格式:
    openssl s_client -connect your-hostname:443 < /dev/null | openssl x509 -outform PEM > cert.pem
    
  2. 提取公钥并计算哈希:
    openssl x509 -in cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
    
    执行后直接输出sha256/后所需的字符串,复制结果即可。

方法二:使用Java keytool+代码(稳定兼容ECC)

如果环境有JDK,用这套方法不会出现不稳定问题:

  1. 导出网站证书到本地:
    keytool -printcert -rfc -sslserver your-hostname:443 > cert.pem
    
  2. 运行以下Java代码计算哈希:
    import java.io.FileInputStream;
    import java.security.cert.CertificateFactory;
    import java.security.cert.X509Certificate;
    import java.security.MessageDigest;
    import java.util.Base64;
    
    public class CertHash {
        public static void main(String[] args) throws Exception {
            CertificateFactory cf = CertificateFactory.getInstance("X.509");
            X509Certificate cert = (X509Certificate) cf.generateCertificate(new FileInputStream("cert.pem"));
            byte[] pubKey = cert.getPublicKey().getEncoded();
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte[] hash = md.digest(pubKey);
            System.out.println(Base64.getEncoder().encodeToString(hash));
        }
    }
    
    编译运行后输出的就是所需字符串,ECC和RSA证书都适用。

方法三:Python脚本(快捷无依赖)

有Python环境的话,用脚本一键生成:

import socket
import ssl
import hashlib
import base64

hostname = "your-hostname"
port = 443

context = ssl.create_default_context()
with context.wrap_socket(socket.socket(), server_hostname=hostname) as s:
    s.connect((hostname, port))
    cert = s.getpeercert(True)

pubkey_hash = hashlib.sha256(cert).digest()
print(base64.b64encode(pubkey_hash).decode('utf-8'))

替换your-hostname为目标域名,直接运行即可得到结果。

方法四:浏览器手动提取(直观易操作)

  1. 打开目标网站,点击地址栏锁图标→「证书」→「详细信息」→「公钥」,复制公钥的十六进制内容(去掉空格和换行)
  2. 用以下Python代码转换为目标哈希:
    import hashlib
    import base64
    
    hex_pubkey = "复制的公钥十六进制字符串"
    pubkey_bytes = bytes.fromhex(hex_pubkey)
    hash = hashlib.sha256(pubkey_bytes).digest()
    print(base64.b64encode(hash).decode('utf-8'))
    

内容的提问来源于stack exchange,提问作者Lena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 03:25:22