集成saml_idp报Neither PUB key nor PRIV key错误及配置咨询
问题解决
1. 私钥证书解析错误修复
你遇到的Neither PUB key nor PRIV key: nested asn1 error属于ASN.1格式解析失败错误,并非配置未加载,原因和修复方案如下:
- 你使用
strip_heredoc处理多行证书和私钥时,如果证书/私钥内容每行开头有多余缩进、存在不可见空格/换行符,或者填写的my_private_key/my_certificate本身内容有缺漏、格式错误,都会触发该报错 - 控制器中
encode_response传入的encryption.cert取的是ENV["SAML_CERTIFICATE"],如果和配置文件中写死的证书内容不一致,也会导致加密阶段证书解析失败,建议统一取值来源:要么全用环境变量,要么直接调用配置文件中的SamlIdp.config.x509_certificate - 定位验证方法:在Rails控制台执行以下代码,即可判断是否是证书/私钥本身格式问题:
# 验证证书格式有效性 OpenSSL::X509::Certificate.new(SamlIdp.config.x509_certificate) # 验证私钥格式有效性 OpenSSL::PKey::RSA.new(SamlIdp.config.secret_key)
如果上述代码执行报错,直接重新生成标准SAML证书对即可,生成命令:
openssl req -x509 -newkey rsa:4096 -keyout my_key.pem -out my_cert.pem -days 3650 -nodes
生成后将pem文件的完整内容(包括开头结尾的-----BEGIN CERTIFICATE-----/-----BEGIN PRIVATE KEY-----标记)完整复制到配置中,不要做任何裁剪或修改。
- 额外注意:你的配置文件中先后两次定义了
config.name_id.formats,靠前的定义会被靠后的覆盖,无效配置可删除避免混淆。
2. service_providers配置疑问解答
- 配置块的键:填写对应服务提供商(SP)的
Entity ID(也叫Issuer ID),该值是SP发起SAML认证请求时携带的issuer参数值,saml_idp会将请求携带的issuer和配置键匹配,找到对应的SP配置 - metadata_url参数:SP提供的元数据接口地址,saml_idp可以主动从该地址拉取SP的公钥、断言消费地址(ACS)、签名算法等配置,无需手动填写这些参数,拉取后的元数据会通过你配置的
metadata_persister持久化到本地 - response_hosts参数:允许接收SAML响应的域名白名单,如果SP的断言消费地址(ACS)的域名不在该列表中,saml_idp会拒绝返回响应,避免响应被发送到恶意站点
内容的提问来源于stack exchange,提问作者Aniket Tiwari
相关产品推荐
相关产品推荐

