如何生成满足IRS电子服务系统要求的自签名RSA类型JWK密钥
生成符合IRS要求的RSA类型JWK操作步骤
IRS系统默认不接受自签名证书作为JWK的绑定证书,这是你使用自签名方式生成时报错的核心原因。如果是开发测试阶段可先按以下流程生成临时版本,生产环境必须替换为IRS认可的CA签发的正式证书。
第一步:生成RSA密钥对和证书文件
使用openssl工具执行以下命令:
- 生成2048位RSA私钥:
openssl genrsa -out irs-private-key.pem 2048 - 生成证书签名请求(CSR):
openssl req -new -key irs-private-key.pem -out irs-csr.pem - 测试环境生成临时自签名证书:
openssl x509 -req -days 365 -in irs-csr.pem -signkey irs-private-key.pem -out irs-certificate.pem
生产环境需将生成的CSR提交给IRS信任的CA机构,获取正式签发的PEM格式证书。
第二步:提取各必填字段值
- kty:固定填写字符串
"RSA" - use:固定填写
"sig",IRS要求该字段标识密钥为签名用途 - n:RSA公钥模数,需转换为Base64URL编码格式
- e:RSA公钥指数,需转换为Base64URL编码格式,通用默认值为
AQAB(对应十进制65537) - x5t:证书的SHA-1指纹,转换为Base64URL编码格式,可通过以下命令直接计算:
openssl x509 -in irs-certificate.pem -fingerprint -sha1 -noout | sed 's/://g' | xxd -r -p | base64 | tr '+/' '-_' | tr -d '=' - x5c:证书链的普通Base64编码数组,单证书场景下只需填写证书PEM内容去除头尾
-----BEGIN CERTIFICATE-----、-----END CERTIFICATE-----标识和所有换行后的字符串 - kid:自定义的密钥唯一标识,保证同个JWK集合内无重复即可,建议使用证书SHA-256指纹的前16位字符
第三步:组装为标准JWK格式
参考结构如下:
{ "kty": "RSA", "use": "sig", "kid": "自定义的唯一密钥ID", "n": "Base64URL编码的RSA公钥模数", "e": "AQAB", "x5t": "Base64URL编码的证书SHA-1指纹", "x5c": [ "证书的普通Base64编码内容" ] }
本地校验方法
可使用jose类库做本地格式校验,Python示例代码:
from jose import jwk with open('irs-certificate.pem', 'r') as f: cert_content = f.read() public_jwk = jwk.construct(cert_content, algorithm='RS256').to_dict() # 手动补全kid、use字段即可得到符合格式要求的JWK
注意:自签名证书仅可用于本地开发调试,提交到IRS生产接口时必须替换为IRS信任CA签发的正式证书,否则仍会返回校验错误。
内容的提问来源于stack exchange,提问作者Robert Tinghitella
相关产品推荐
相关产品推荐

