如何使用Python生成用于Firebase的SHACertificate及对应sha_hash
解决方案
你现有代码已经生成了有效的X509证书,Firebase要求的sha_hash格式本质是证书指纹的大写十六进制字符串,每2个字符之间用冒号分隔,无需额外转换keystore格式,直接在现有代码基础上计算对应哈希值即可使用。
具体实现
在现有代码中新增以下逻辑,直接从已生成的PEM格式证书计算符合要求的SHA值:
import hashlib # 处理PEM格式证书,去除头尾标记和换行符 pem_content = dumped_cert.decode("utf-8").strip() # 移除-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----头尾行 pem_body = "".join([line.strip() for line in pem_content.splitlines() if not line.startswith("-----")]) # 转成二进制DER格式 der_cert = bytes.fromhex(pem_body) # 计算SHA1指纹(Firebase常用格式) sha1_hex = hashlib.sha1(der_cert).hexdigest().upper() firebase_sha1 = ":".join([sha1_hex[i:i+2] for i in range(0, len(sha1_hex), 2)]) # 如需SHA256指纹,使用以下代码计算 sha256_hex = hashlib.sha256(der_cert).hexdigest().upper() firebase_sha256 = ":".join([sha256_hex[i:i+2] for i in range(0, len(sha256_hex), 2)])
得到的firebase_sha1/firebase_sha256可以直接填入Firebase控制台的SHA证书输入栏,或者传入Admin SDK的SHA证书创建接口使用。
从已有JKS文件提取的方法
如果你需要从已导出的keystore文件中提取哈希,使用以下代码即可:
import jks import hashlib # 加载JKS文件 keystore = jks.KeyStore.load(filePath, password) # 取对应别名的私钥条目 pke = keystore.private_keys[alias] # 取第一条证书计算哈希 cert_data = pke.cert_chain[0][1] # 后续计算逻辑和上面一致 sha1_hex = hashlib.sha1(cert_data).hexdigest().upper() firebase_sha1 = ":".join([sha1_hex[i:i+2] for i in range(0, len(sha1_hex), 2)])
内容的提问来源于stack exchange,提问作者Wayne Whitehead
相关产品推荐
相关产品推荐

