You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Karate+Python自动化脚本中为API调用添加cert.pem和key.pem作为请求头?

Karate + Python 自动化实现SSL证书生成与API调用配置

一、用Python自动生成公私钥对

可以用Python的cryptography库生成自签名证书和私钥,全程自动化无需手动下载文件。

  1. 先安装依赖:
pip install cryptography
  1. 生成证书和私钥的代码示例:
from cryptography import x509
from cryptography.x509.oid import NameOID
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.backends import default_backend
import datetime

# 生成RSA私钥
private_key = rsa.generate_private_key(
    public_exponent=65537,
    key_size=2048,
    backend=default_backend()
)

# 配置自签名证书的主体信息
subject = issuer = x509.Name([
    x509.NameAttribute(NameOID.COUNTRY_NAME, "CN"),
    x509.NameAttribute(NameOID.STATE_OR_PROVINCE_NAME, "Beijing"),
    x509.NameAttribute(NameOID.LOCALITY_NAME, "Beijing"),
    x509.NameAttribute(NameOID.ORGANIZATION_NAME, "TestOrg"),
    x509.NameAttribute(NameOID.COMMON_NAME, "test-api.com"),
])

# 创建自签名证书
cert = x509.CertificateBuilder().subject_name(
    subject
).issuer_name(
    issuer
).public_key(
    private_key.public_key()
).serial_number(
    x509.random_serial_number()
).not_valid_before(
    datetime.datetime.utcnow()
).not_valid_after(
    datetime.datetime.utcnow() + datetime.timedelta(days=365)
).add_extension(
    x509.SubjectAlternativeName([x509.DNSName("test-api.com")]),
    critical=False,
).sign(private_key, hashes.SHA256(), default_backend())

# 保存私钥到key.pem
with open("key.pem", "wb") as f:
    f.write(private_key.private_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PrivateFormat.TraditionalOpenSSL,
        encryption_algorithm=serialization.NoEncryption()
    ))

# 保存证书到cert.pem
with open("cert.pem", "wb") as f:
    f.write(cert.public_bytes(serialization.Encoding.PEM))

运行这段代码后,会在当前目录自动生成cert.pem和key.pem文件。

二、在Karate测试中使用生成的证书

Karate原生支持SSL客户端证书认证,直接在测试脚本中指定证书路径即可完成配置。

方式1:全局配置(所有请求生效)

在karate-config.js中添加SSL配置:

function fn() {
    var config = {
        apiUrl: 'https://your-target-api.com'
    };
    // 绑定生成的证书和私钥
    karate.configure('ssl', {
        cert: 'cert.pem',
        key: 'key.pem'
    });
    return config;
}

之后所有API请求都会自动使用这两个文件进行SSL认证。

方式2:单个请求配置

如果仅需特定请求使用证书,可在请求中单独设置:

Given url apiUrl + '/target-endpoint'
And ssl cert 'cert.pem' key 'key.pem'
When method get
Then status 200

方式3:Python驱动Karate联动

如果用Python调用Karate测试(比如通过subprocess),可以先执行证书生成逻辑,再启动Karate脚本,确保Karate能读取到生成的文件:

import subprocess

# 先执行证书生成逻辑(可封装成函数)
def generate_cert_and_key():
    # 这里放入前面的证书生成代码
    pass

generate_cert_and_key()

# 调用Karate测试文件
subprocess.run(['karate', 'your-test.feature'])

注意事项

  • 生成的证书需匹配目标API的域名要求,否则会触发SSL验证错误
  • 如果目标API使用CA签发的证书,需额外配置信任CA证书:karate.configure('ssl', { trustStore: 'ca-cert.pem' })

内容的提问来源于stack exchange,提问作者ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 07:27:33