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

WSO2 APIM 4.1.0中Postman调用Mutual SSL API失败求助

WSO2 APIM 4.1.0 双向SSL调用失败问题排查与解决

环境与配置背景

  • WSO2 APIM 4.1.0 GA版本
  • 操作系统:Windows 11
  • 通过Java Keytool生成自签名证书配置双向SSL,证书生成步骤如下:
    1. 创建新密钥库:
      keytool -genkey -keyalg RSA -alias dev.wso2.com -keystore "C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.jks" -validity 4000
      
    2. 转换为PKCS12格式:
      keytool -importkeystore -srckeystore C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.jks -destkeystore C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.jks -deststoretype pkcs12
      
    3. 导出公钥:
      keytool -exportcert -alias dev.wso2.com -rfc -file "C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.pem" -keystore "C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.jks"
      
    4. 将公钥导入信任库:
      keytool -import -alias dev.wso2.com -file "C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.pem" -keystore "C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\client-truststore.jks"
      

证书已成功导入信任库并通过管理控制台验证,后续完成以下配置:

  • 在发布者门户创建API,启用强制双向SSL
  • 应用级安全设置中上传客户端证书,将OAuth设为可选
  • API已发布至开发者门户

调用错误详情

Postman调用错误

在Postman证书标签配置:

  • Host: dev.wso2.com
  • CRT文件: dev.wso2.crt
  • KEY文件: devwso2.pem
  • Passphrase: keystorepwd

关闭通用标签的SSL证书验证后调用,收到错误:

Error: error:0900006e:PEM routines:OPENSSL_internal:NO_START_LINE

Curl调用错误

执行命令:

curl -vk  GET "https://dev.wso2.com:8243/mutualsslapi/1.0.0" -H "accept: applicaition/json"  --cert "C:\Development_Avecto\Learning\File\dev.wso2.crt" --key "C:\Development_Avecto\Learning\File\devwso2.pem"

返回错误:

  • Could not resolve host: GET
  • Closing connection 0
    curl: (6) Could not resolve host: GET
  • Trying 127.0.0.1:8243...
  • Connected to dev.wso2.com (127.0.0.1) port 8243 (#1)
  • schannel: disabled automatic use of client certificate
  • schannel: Failed to import cert file C:\Development_Avecto\Learning\File\dev.wso2.crt, last error is 0x80092002
  • Closing connection 1
    curl: (58) schannel: Failed to import cert file C:\Development_Avecto\Learning\File\dev.wso2.crt, last error is 0x80092002

问题原因分析

  1. Postman错误原因:

    • NO_START_LINE错误表明OpenSSL无法识别私钥文件格式,你导出的devwso2.pem是公钥而非私钥,Postman需要包含私钥的PEM文件,而非公钥。
    • dev.wso2.crt若为JKS导出的公钥证书,格式可能不符合Postman要求,需确保是完整的PEM格式证书。
  2. Curl错误原因:

    • 第一个错误Could not resolve host: GET是因为命令中-vk和GET之间多了空格,导致curl把GET当作主机名解析。
    • 第二个错误schannel: Failed to import cert file是因为Windows下curl默认使用schannel作为SSL后端,schannel不支持单独的PEM格式证书和私钥,需使用PFX(PKCS12)格式的证书文件。

解决方法

1. 导出正确的私钥和证书文件

从PKCS12格式的JKS中导出包含私钥的PEM文件和完整证书(需安装OpenSSL工具):

  • 导出私钥:
    openssl pkcs12 -in "C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.jks" -nocerts -out devwso2-key.pem -nodes
    
  • 导出证书:
    openssl pkcs12 -in "C:\pathtoAPIM\wso2am-4.1.0\repository\resources\security\devwso2.jks" -nokeys -out devwso2-cert.pem
    
  • (可选)将证书和私钥合并成PFX文件(适配curl的schannel后端):
    openssl pkcs12 -export -in devwso2-cert.pem -inkey devwso2-key.pem -out devwso2.pfx
    

2. Postman调用修正

  • 在Postman证书标签中,将KEY文件替换为刚导出的devwso2-key.pem,CRT文件替换为devwso2-cert.pem。
  • 确认Passphrase为密钥库密码,保存配置后重新调用API。

3. Curl调用修正

方法一:使用PFX文件(推荐)

修正命令语法并使用PFX文件:

curl -vk GET "https://dev.wso2.com:8243/mutualsslapi/1.0.0" -H "accept: application/json" --cert-type P12 --cert "C:\path\to\devwso2.pfx:keystorepwd"

注:修正原命令中applicaiton/json的拼写错误为application/json。

方法二:强制curl使用OpenSSL后端

若安装了带OpenSSL的curl,设置环境变量强制使用OpenSSL后调用:

set SSL_CERT_FILE=C:\path\to\ca-bundle.crt
curl -vk --ssl-no-revoke GET "https://dev.wso2.com:8243/mutualsslapi/1.0.0" -H "accept: application/json" --cert "C:\path\to\devwso2-cert.pem" --key "C:\path\to\devwso2-key.pem"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:36:25