PO系列之 使用证书调用https地址

点击蓝字 关注我们

前言

PO(/PI)是SAP公司的一个中间件产品,用来辅助连接SAP系统与外围系统. (当然外围系统之间也可以使用PO). 

为了传输数据的安全性考虑, 客户会要求系统发布的服务必须通过https请求. 

PO/PI 使用通道类型是 SOAP Receiver 或REST Receiver时. 如果对方提供的地址是https 地址,需要在PO中引入证书.

本文主要介绍PO引入外部证书的相关注意事项

使用http

为了验证http/https 的差异点,先使用http地址配置PO的接口,并且通过SOAPUI测试验证通过.

图示接口是PO调用目标系统的webservice 服务, 对方发布了两个地址 http 及https.

使用http配置通道,测试调用成功.

使用https

调整成https地址,感受差异.

01

调整通道配置

调整目标通道配置, 修改使用https 地址

02

再次测试

在没有任何其它操作的情况下, 使用相同的数据再次调用接口,SOAPUI中报500错误.

03

监控日志

到PO监控中查看

能看到如下报错信息

SOAP: Error occurred: com.sap.engine.interfaces.messaging.api.exception.MessagingException: java.io.IOException: Failed to get the input stream from socket: iaik.security.ssl.SSLCertificateException: Peer certificate rejected by ChainVerifier

获取证书

获取对方的证书文件(该文件可以通过浏览器访问调用地址, 另存证书获取. 

在chrome浏览器点击网站左边的锁,查看证书. 复制到文件.后续一步步执行可以导出一个证书文件 文件后缀 .cer

导入证书

用管理员账号登陆PO, 把证书文件导入到系统中.

01

进入证书管理页面

02

找到TrustedCAs节点

必须导入到TrustedCAs 节点中.

选中该节点, 在导入条目,在弹窗中输入文件信息,完成证书的导入过程

03

查看导入的证书

导入后,可以看到证书的信息


重新测试接口

导入后, 立即重新测试接口, 此时还是http 500的错误(图一). 尝试需要重新启动通道(图二),让证书生效后, 再重新测试接口调用,成功(图三)

图一

图二

图三

注意事项

配置https地址的通道,需要注意以下事项

01

通道配置

通道的 client certificate authentication 复选框 use client certificates 会误导配置人员,该复选框的勾选后, 必须选择一个private key 证书. 而之前导入的证书是CERTIFICATE. 无法选择使用. 无需勾选该标记

02

证书导入节点

证书必须导入到TrustedCAs中

03

重启通道

证书导入后,必须重启通道,可以通过修改激活通道的方式, 也可以在通信通道监控器中停止,启动通道

04

证书有效期

如果导入的证书过期.也无法使用. 过期的证书状态是红灯. 可以在证书明细中看到有效期限

05

端口443

注意默认端口443的使用,浏览器中不显示默认的端口,在实际配置url中需要添加这些默认端口. 但是有些系统发布的地址就是无需使用443端口,这个就需要和对方确认了. 

总结

PO调用目标系统的https地址时,需要先导入对方的系统的证书.通道地址调整为https地址即可. 

因为PO可以导入多个证书,通道配置中又无需指定证书文件,不太理解PO底层机制怎么正确使用特定的证书. 

只能理解为:PO会尝试TrustedCAs中的所有证书,直到联通并标记下来,后续则通过先前的标记确定使用正确的证书.

THE

END

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

公众号 : syjf1976_abap

          ABAP开发技巧

微信号 : 392077

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 申请进入公众号讨论群

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在UI自动化PO模式中,我们可以使用日志模块来记录程序运行过程中的信息,方便后续的调试和排查问题。下面是一个简单的日志模块的封装示例: ```python import logging class Logger: def __init__(self, log_name='test'): self.logger = logging.getLogger(log_name) self.logger.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) console_handler.setFormatter(formatter) file_handler = logging.FileHandler(filename=log_name + '.log', mode='a') file_handler.setLevel(logging.DEBUG) file_handler.setFormatter(formatter) self.logger.addHandler(console_handler) self.logger.addHandler(file_handler) def debug(self, msg): self.logger.debug(msg) def info(self, msg): self.logger.info(msg) def warning(self, msg): self.logger.warning(msg) def error(self, msg): self.logger.error(msg) def critical(self, msg): self.logger.critical(msg) ``` 在这个示例中,我们使用了Python自带的logging模块来实现日志的记录。我们定义了一个Logger类,它包含了一些常用的日志方法,如debug、info、warning、error和critical。在构造方法中,我们可以指定日志文件的名称,日志输出的级别、格式和方式(控制台或文件)。 为了方便调用,我们可以将日志模块的实例化放到公共的文件中,并通过import语句来引用: ```python # log.py from logger import Logger log = Logger() ``` 这样,我们就可以在其他模块中直接使用log对象来调用日志方法,例如: ```python # test_case.py from log import log log.info('测试用例开始执行') ``` 这样就可以将信息输出到控制台和日志文件中了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值