支付宝RSA2公钥证书生成办法

本文介绍了如何使用支付宝开放平台开发助手和openssl生成支付宝RSA2公钥证书,详细步骤包括生成秘钥、CSR文件、自签名证书,并提供了Golang测试代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支付宝RSA2公钥证书生成

前言

支付宝新的转账接口例如转账“alipay.fund.trans.uni.transfer”接口已经在推新的公钥证书模式,由支付宝作为CA帮我们的公钥做签发这样可以在与支付宝通讯时防止通信内容内容被篡改,因此安全性得到了提升,双向通信都需要做验证,但是我们通常在测试情况下需要自身mock支付宝的返回,以此验证各种情况下程序的正确性,生产可以直接下载支付宝CA签名好的公钥,这样就需要我们类似于支付宝做一个自签名的公钥证书,自签发后提供给我们的测试程序使用,同时私钥由mock程序持有来模拟支付宝服务端做签名,下面将分别介绍两种借助支付宝开放平台开发助手和openssl来生成公钥证书,并且第三节提供了测试代码可以用于测试公私钥

支付宝开放平台开发助手生成

支付宝开放平台开发助手使用介绍以及下载地址

上述文档可以指导我们配置生产证书,但是要用它做mock还需要自签名拿到公钥证书,进行下面步骤

  1. 生成秘钥→RSA2→PCKS8点击生成秘钥 获得:应用公钥 2048.txt、应用私钥 2048.txt
  2. 获取CSR文件->点击获取→RSA2→ PKCS8填一下参数点击生成CSR文件:获得xx.scr文件(这里演示代指为test.com.csr),scr是签名请求文件
  3. 第一步生成的:应用私钥 2048.txt是PKCS8格式的私钥,签名需要PKCS1格式的私钥,可以用工具中的格式转换→转PKCS1做转换转换完成后得到PKCS1文本保存到本地,(此处演示使用pri_pkcs1.crt命名)
  4. 注意3步骤得到的PKCS1文本需要按照65字符换行且加上头尾,头:-----BEGIN RSA PRIVATE KEY----- 尾:-----END RSA PRIVATE KEY-----
  5. 使用openssl做自签名,命令:openssl x509 -req -in test.com.csr -out testpem.crt -signkey pri_pkcs1.crt -days 3650
  6. 这样我们就模拟CA为我们的公钥做了签名得到的testpem.crt证书就可以作为公钥证书使用了,加签、加密看要求是PKCS1可以用pri_pkcs1.crt、或者用PKCS8可用应用私钥 2048.txt(加上头尾-----BEGIN PRIVATE KEY-----、-----END PRIVATE KEY-----) (可以改个名如pri_pkcs8.crt )

使用openssl生成

通常mac电脑自带openssl无需额外安装

  1. 使用命令:openssl genrsa -out server.crt 2048 获得PKCS1证书
  2. 使用命令:openssl pkcs8 -topk8
    -inform PEM -in server.crt -outform PEM -nocrypt 可以生成不带密码的PKCS8格式的证书,可以保持为文件,这里演示保存为testprivate_pkcs8.key
  3. 使用命令:openssl req -new -key server.crt -out server.csr
    并根据提示输入证书信息,得到包含自身信息的证书请求文件用于请求CA为自己的公钥做签名,最后一个是密码不需要直接回车跳过
  4. 使用命令:openssl x509 -req -in server.csr -out server_pem.crt -signkey
    server.crt -days
    3650,这样可以用自己的私钥代替CA为自己做签名,证书有效期10年足够使用了,注意这个不是受信任的CA签发的证书所以无法在生产环境受信任但是测试环境没问题
  5. 最后公钥证书为server_pem.crt、私钥按格式分别为:
    server.crt(pkcs1)和3中生成的testprivate_pkcs8.key

测试代码(golang)

下附测试证书

package main

import (
	"crypto"
	"crypto/rand"
	"crypto/rsa"
	"crypto/sha256"
	"crypto/x509"
	"encoding/base64"
	"encoding/json"
	"encoding/pem"
	"errors"
	"fmt"
	"io/ioutil"
)

func main() {
   
	// 待签名参数集
	params := "123123123,模拟待签名参数"

	// 从文件加载公钥证书
	err := LoadPublicCertFromFile("test_pub.pem")
	if err != nil {
   
		fmt.Println("LoadPublicCertFromFile, err=", err)
		return
	}

	// 加载私钥
	err = LoadPrivateCertFromFile("test_pri.crt")
	if err != nil {
   
		fmt.Println("LoadPrivateCertFromFile, err=", err)
		return
	}

	jsonData, err := json.Marshal(params)
	if err 
### 解决Content Security Policy (CSP) img-src 'self' data: base64 错误 当遇到 `img-src` CSP 指令违反策略的问题时,通常是由于网页尝试加载不符合指定来源的图像资源引起的。以下是可能的原因以及解决方案: #### 原因分析 1. **CSP 策略定义不足** 当前 CSP 中设置了 `img-src 'self'`,这意味着只有来自同一源(即当前域名)的图片才能被加载。如果页面中有通过 `data:` 或者其他外部 URL 加载的图片,则会被阻止[^1]。 2. **Base64 图像嵌入问题** 使用 Base64 编码的内联图像是一种常见的优化手段,但如果未显式允许 `data:` 协议,在 CSP 下这些图像将无法正常显示。 3. **动态生成的内容冲突** 动态注入 HTML 内容可能导致意外行为,尤其是当内容中包含不受信任的数据时,这可能会触发 CSP 警告或错误。 --- #### 解决方案 ##### 方法一:扩展 `img-src` 定义范围 修改 `<meta>` 标签中的 CSP 策略以支持更多类型的图像来源。例如: ```html <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; img-src 'self' data:;"> ``` 上述配置表示除了允许同源的图片外,还允许基于 Base64 的编码图像加载。 ##### 方法二:调整服务器端响应头 如果 CSP 是由 HTTP 头部设置而非 `<meta>` 标签控制,则需更新 Web 服务器配置文件。对于 Nginx 和 Apache 分别有以下示例: - **Nginx** ```nginx add_header Content-Security-Policy "default-src 'self'; script-src 'self'; img-src 'self' data;"; ``` - **Apache** ```apache Header set Content-Security-Policy "default-src 'self'; script-src 'self'; img-src 'self' data;" ``` 以上更改确保浏览器能够识别并接受 Base64 数据作为合法的图像来源[^1]。 ##### 方法三:移除违规代码片段 检查前端代码是否存在非法调用第三方资源的情况。比如某些框架库自动插入了跨域请求或者使用了未经许可的协议加载媒体资产。清理掉不必要的部分有助于减少潜在风险。 ##### 方法四:启用报告机制捕获异常事件 为了更好地监控实际运行状况,建议开启 CSP Reports 功能收集反馈日志以便后续改进措施制定。 ```html <meta http-equiv="Content-Security-Policy" content="... report-uri /csp-report-endpoint"> ``` 此操作会把每次发生的违禁访问记录提交至指定 URI 地址供管理员审查处理。 --- ### 示例代码展示 下面给出一段简单的 PHP 页面演示如何正确应用增强后的 CSP 设置防止类似问题再次发生。 ```php <?php header('Content-Security-Policy: default-src \'self\'; script-src \'self\'; img-src \'self\' data:'); ?> <!DOCTYPE html> <html lang="en"> <head> <title>CSP Example</title> </head> <body> <!-- 合法本地图片 --> <img src="/images/example.jpg"> <!-- 合法base64编码图片 --> <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUA..." alt="Embedded Image"> <h1>Secure Page Loaded Successfully!</h1> </body> </html> ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值