更新时间:2022-11-04 11:22:49收藏订阅更新我的文档设置返回文档q:rsa 签名涉及到的商家角色有哪些? a:rsa 签名涉及到的商家角色分为支付宝账号管理者和技术人员,分别执行如下操作: ●支付宝账号管理者:登录开放平台上传商家应用公钥,并记录 appid 及支付宝公钥信息。 ●技术人员:将 appid、应用私钥、支付宝公钥,写入应用代码执行签名和验签。q:什么是 rsa 算法? a:rsa 签名算法是一种非对称算法,rsa 密钥包括公钥和私钥两部分,公钥是公开信息,私钥是保密信息。在开放平台,开发者的私钥由开发者自己保存;开发者的公钥可对外公开。私钥用于签名,公钥用于验签。开发者保存自己的私钥,并对发给支付宝的信息进行签名,支付宝通过使用开发者的公钥进行验签;(支付宝端类似),通过这种方式保证信息传输的完整性以及发送者身份的真实性。q:和支付宝交换公钥是什么意思? a:开发者私钥由开发者自行保管,把对应公钥提供给支付宝。相应的,支付宝提供自己的公钥给开发者,这称为交换公钥。开发者使用开发者私钥对请求内容签名,支付宝收到请求后,会使用开发者公钥进行验签,验签通过证明信息来源可靠并且未篡改。支付宝发送给开发者的数据中,支付宝也会使用自己的私钥进行签名。商家收到后,使用支付宝公钥验签,验签通过证明是支付宝发送的消息,并且未篡改。 q:开放平台 openapi 网关接口和支付宝 mapi 网关接口签名处理上有何区别? a:开放平台接口网关地址是 open.alipay.com,mapi 网关地址是 mapi.alipay.com。签名专区描述的内容是针对 openapi 网关接口的签名和验签方法。如果是 mapi 网关接口,签名规则有所区别,详情可查看 。 q:开放平台支持的公钥、公钥证书两种签名方式有什么区别? a:在报文签名场景下,报文接受方使用发送方的公钥进行报文验签,该功能两种签名方式都可以实现。而证书签名方式的优势在于引入了 ca 机构对公钥持有者进行身份识别,保证该证书所属实体的真实性,以实现报文的抗抵赖。q:原使用公钥签名方式的应用如何升级公钥证书签名方式? a:开发者登录开放平台,在应用 加签方式 设置页面,选择 公钥证书 方式,再在该页面中通过 上传 csr 文件在线生成证书 或 上传已申请证书 两种方式设置应用的公钥证书。详情可查看 开放平台证书升级指南。注意:对于从 公钥 变更到 公钥证书 签名方式的应用,在变更 7 日内允许开发者撤销证书回退到 公钥 模式;变更一周后不允许再回退到原模式。开发者调用支付宝网关的代码也需要升级,否则变更 7 日后原来的 公钥 模式接入会被支付宝网关拦截而无法成功调用。 q:老应用公钥证书如何更换成新公钥证书?a:开发者登录开放平台,在应用 加签方式 设置页面,选择 公钥证书 方式,再在该页面中通过 上传 csr 文件在线生成证书 或 上传已申请证书 两种方式设置应用新应用公钥证书。详情可查看 开放平台证书升级指南。注意:上传新应用公钥证书后,开放平台将为老应用公钥证书保留 7 天有效期(若在这 7 天内老证书到期,以老证书自身过期时间点为准),超过 7 天后老证书将不可用。开发者务必在更新证书后 7 天时间内,更换接入开放平台网关代码中的应用公钥证书,否则 7 天后开放平台网关将验签失败。 q:使用公钥证书签名方式下, 请求参数中需要携带应用公钥证书 sn(app_cert_sn)、支付宝根证书 sn(alipay_root_cert_sn),这里的 sn 是指什么?a:这里的 sn 是指基于开放平台提供的计算规则,动态计算出来的公钥证书序列号,与 x.509 证书中内置的序列号(serialnumber)不同。具体的计算规则如下: 1解析 x.509 证书文件,获取证书签发机构名称(name)以及证书内置序列号(serialnumber)。2将 name 与 serialnumber 拼接成字符串,再对该字符串做 md5 计算。可查看 开放平台 sdk 源码中的 alipaysignature.getcertsn 方法实现。说明:开放平台支持开发者上传自己找第三方权威 ca 签发的证书,而证书文件中内置序列号只能保证同一家签发机构签发的证书不重复。所以不支持直接使用证书文件中内置的序列号。q:使用公钥证书签名方式下,为什么请求参数中必须应用公钥证书 sn(app_cert_sn)? a:当前开放平台支持两种签名模式:公钥模式、公钥证书模式,开放平台网关会根据请求参数中是否存在应用公钥证书 sn(app_cert_sn)来判断当前请求是使用公钥模式还是公钥证书模式。若开发者选择了公钥证书签名模式,上传了应用公钥证书,并使用该公钥对应的私钥加签,但请求参数中未携带应用公钥证书 sn。开放平台网关收到请求后,会认为该请求使用公钥签名模式,将导致网关验签失败。另外,开发者也一定要确保自己用来加签的私钥、请求参数中应用公钥证书 sn 的值、上传到开放平台的应用公钥证书必须是匹配的,否则网关会验签失败。q:使用公钥证书签名方式下,为什么开放平台网关的响应报文需要携带支付宝公钥证书 sn(alipay_cert_sn)?a:开发者上传自己的应用公钥证书后,开放平台会为开发者应用自动签发支付宝公钥证书供开发者下载,用来对开放平台网关响应报文做验签。但是支付宝公钥证书可能因证书到期或者变更 ca 签发机构等原因,可能会重新签发证书。在重新签发前,开放平台会在门户上提前提醒开发者支付宝应用公钥证书变更时间。 但为避免开发者因未能及时感知支付宝公钥证书变更而导致验签失败,开放平台提供了一种支付宝公钥证书无感知升级机制,具体流程如下:1开放平台网关在响应报文中会多返回支付宝公钥证书 sn。2开放平台网关提供根据 sn 下载对应支付宝公钥证书的 api 接口。3开发者在验签过程中,先比较本地使用的支付宝公钥证书 sn 与开放平台网关响应中 sn 是否一致。若不一致,可调用支付宝公钥证书下载接口下载对应 sn 的支付宝公钥证书。4对下载的支付宝公钥证书执行证书链校验,若校验通过,则用该证书验签。 说明:基于该机制可实现支付宝公钥证书变更时开发者无感知,当前开放平台提供的 sdk 已基于该机制实现对应功能。若开发者未通过 sdk 接入,须自行实现该功能。 q:使用公钥证书签名方式下,为什么请求参数中必须设置支付宝根证书 sn(alipay_root_cert_sn)? a:对动态下载的支付宝公钥证执行的证书校验过程中需要使用到支付宝根证书。但公钥证书的变更有可能是由于根证书的变更导致,若根证书未更新,则会引起公钥证书更新失败,导致商家验签失败。为降低该风险,支付宝开放平台强制要求证书签名模式的商家同时携带当前使用的支付宝根证书 sn,开放平台可基于该根证书 sn 统计未及时更新支付宝根证书的商家。q:当前开放平台支持哪些权威 ca 签发的证书? a:当前开放平台支持根 ca 列表:机构名称电子认证服务机构简称 证书主题名称密钥算法证书生效时间(gmt)证书失效时间(gmt)浙江蚂蚁小微金融服务集团股份有限公司蚂蚁caant financial certification authority r1rsa40962018/3/21 13:482038/2/28 13:48中金金融认证中心有限公司 cfcacfca acs carsa40962015/9/23 3:242035/9/28 3:24北京天威诚信电子商务服务有限公司天威诚信itruschina class 3 root ca - g3rsa20482013/4/18 9:362033/4/18 9:36北京天威诚信电子商务服务有限公司天威诚信itruschina class 2 root ca - g3rsa20482013/4/18 9:392033/4/18 9:39国家根rootcarootcasm22012/7/14 3:112042/7/7 3:11q:服务端如何接收通知及验签?以支付接口接收通知并处理为例。java 调用示例java 异步验签示例java异步验签示例(证书)php 调用示例php异步验签示例c#调用示例c#异步验签示例验签方法中 keyfromfile 必传 false,否则验签失败。c#异步验签示例(证书)q:pageexecute() 方法如何生成 url 链接?a:网站类的接口(例如手机网站支付、电脑网站支付)接口的请求使用 pageexecute() 方式进行请求默认为 post 方式请求,即生成 form 表单,get 方式请求生成 url 链接。注意:●该 pageexecute() 方法生成 url 链接的为 alipay sdk(老版)接口请求方法。●alipay easy sdk(新版)目前只支持输出 form表单,不支持打印出 url 链接。不同语言请求方式不同,如下:●java 示例代码:●php 示例代码:●.net 示例代码: 注意:.net 开发语言 get 必须大写,不支持小写,并且设置在第三个参数位置。●python 示例代码:●nodejs 示例代码: 注意:post 方式请求时,调用 setmethod 并传入 post,则返回 from 表单(不调用 setmethod 默认为 post 请求)。