我的知识星球里有朋友向我求助,咨询 ABAP 同第三方系统通过 HTTPS 交互时,ABAP 作为客户端的 SSL 证书配置问题。
我的回复是,事务码 STRUST 即 ABAP Trust Manager 里这些配置,一般是 SAP Basis 的职责,ABAP 开发人员遇到问题的话,找 Basis 求助就行了。
这位朋友回复我,公司规模比较小,没有 Basis … 一切都是自己弄 …
SAP ABAP 系统如何配置以支持 TLS 即 Transport Layer Security,在官方帮助文档里有详细介绍,我也借帮助这位朋友排查问题的机会,学习了一下官网的文档。
本文是我的学习笔记,写出来以备后用。这些算是计算机基础知识,无论用什么编程语言做开发,都用得上。
在计算机安全领域,特别是在涉及加密和身份验证的场景中,公钥基础设施 (PKI, Public Key Infrastructure) 扮演着至关重要的角色。
PKI 是一套由硬件、软件、政策、标准和程序组成的系统,用于创建、管理、分发、使用、存储和撤销数字证书。它通过使用公钥加密技术来提供安全的数据传输、身份验证、数据完整性和数据保密性。
PKI 系统中最重要的组成部分是公钥和私钥对、数字证书以及认证机构 (CA, Certificate Authority)。
图片出处:https://doubleoctopus.com/wp-content/uploads/2021/08/Certificate-Authority-Secret-double-octopus-1.png
公钥通常是公开的,任何人都可以访问,而私钥则是保密的,只有密钥的拥有者才能使用。
公钥和私钥之间有一个非常重要的关系:使用公钥加密的数据只能由对应的私钥解密,反之亦然。
数字证书是由认证机构 (CA) 签发的,绑定公钥和实体身份的一种电子文档。它包含了持有者的公钥以及一些与持有者身份相关的信息,如姓名、电子邮件地址等。数字证书的目的是通过第三方(即 CA)来验证公钥的有效性,从而确保公钥的持有者的身份是可信的。
认证机构 (CA) 是一个受信任的实体,负责颁发、管理、撤销数字证书。它通过签名来证明证书的真实性和有效性。当一个 CA 签署一个数字证书时,它使用其私钥对证书进行签名。任何人可以使用 CA 的公钥来验证该签名,从而确认证书的真实性。
传输层安全协议(TLS),通常被称为 SSL,利用公钥技术来保障通信安全。因此,服务器必须拥有一对公钥和私钥,并配备相应的公钥证书。
为了标识服务器身份,服务器需要具备一套密钥对和证书;如果服务器还需要标识自己为客户端身份,则还需要另外一套密钥对和证书。这些密钥对和证书存储在服务器的个人安全环境(Personal Security Environment 简称 PSE)中,分别对应于 SSL 服务器 PSE 和 SSL 客户端 PSE。
我们在 ABAP 事务码 STRUST 里可以看到导入和导出证书的菜单。那么待导入系统的证书,是如何生成的呢?
首先,服务器管理员需要生成一对密钥:公钥和私钥。这个过程通常通过命令行工具(如 OpenSSL)或其他加密软件来完成。生成密钥对的命令可能类似如下:
openssl genrsa -out private.key 2048
这条命令生成了一个 2048 位的 RSA 私钥,并将其保存到 private.key
文件中。接下来,公钥可以从私钥中导出:
openssl rsa -in private.key -pubout -out public.key
通过这条命令,生成了与私钥对应的公钥,并将其保存到 public.key
文件中。现在,服务器管理员有了一对密钥:一个私钥和一个公钥。
生成证书请求 (CSR)
在生成密钥对之后,服务器管理员需要生成一个证书签名请求 (CSR, Certificate Signing Request)。CSR 是一种标准格式的请求文件,包含了服务器的公钥以及其他一些关于服务器身份的信息,如域名、公司名称、组织单位等。生成 CSR 的命令如下:
openssl req -new -key private.key -out server.csr
此命令使用之前生成的私钥来创建一个新的 CSR 文件 server.csr
。在这个过程中,管理员需要输入一些与服务器身份相关的信息,例如:
- 国家:CN
- 省份:Beijing
- 城市:Beijing
- 组织名称:MyCompany
- 组织单位名称:IT Department
- 公共名称 (Common Name):www.example.com
这些信息将被包含在 CSR 中,并最终包含在数字证书内。
生成 CSR 之后,管理员需要将该请求发送给一个 CA。CA 是一个受信任的第三方机构,它负责验证申请者的身份并签发数字证书。通常情况下,管理员会通过电子邮件或 CA 提供的在线门户将 CSR 文件提交给 CA。
CA 收到 CSR 后,将验证请求中包含的信息是否真实和准确。这通常涉及验证域名的所有权和公司信息的合法性。一旦 CA 验证通过,它将使用自己的私钥对 CSR 中的公钥进行签名,生成一个正式的数字证书,并将该证书发送回服务器管理员。
这个签署过程的实质是:CA 使用其私钥生成一个加密的哈希值(也称为签名),并将这个签名附加到证书上。任何人都可以使用 CA 的公钥来解密这个哈希值,从而验证证书的真实性。
一旦服务器管理员收到 CA 签署的数字证书,就可以使用事务码 STRUST 将该证书安装在服务器上。
安装步骤在 SAP 帮助文档中也有详细介绍。
这个证书通常与服务器的私钥配对使用,以支持安全的 HTTPS 连接。在 HTTPS 连接中,服务器将其公钥(包含在证书中)发送给客户端,客户端使用这个公钥加密数据,服务器则使用相应的私钥解密数据。
在整个过程中,生成密钥对、创建 CSR、提交 CSR 并获得 CA 签名的证书是确保服务器与客户端之间安全通信的关键步骤。通过 PKI 和 CA 的引入,公钥的真实性得到了保证,SAP NetWeaver AS for ABAP 与第三方系统之间的 HTTPS 连接,其传输的数据能够被加密,同时通讯双方的身份也能够得到验证,确保了信息的安全。
本文后续会介绍这些证书,如何在 ABAP 同第三方系统进行 HTTPS 通信的代码中得到体现。