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

如何将Perl SOAP服务改造为支持2-Way-TLS的HTTPS服务并实现客户端认证

Perl SOAP服务双向TLS改造方案

前置依赖安装

首先需要安装两个核心依赖:

  • 最新版 SOAP::Lite 框架,内置HTTPS Daemon支持
  • IO::Socket::SSL 模块,提供底层TLS能力

证书准备

双向TLS场景需要提前准备以下证书文件,建议由统一的内部CA签发:

  • 服务端侧需持有:
    • CA根证书文件(用于验证客户端证书的合法性)
    • 服务端证书文件(由同一CA签发,绑定服务端域名/IP)
    • 服务端私钥文件(需严格控制访问权限,建议设置为600权限)
  • 可信客户端侧需持有:
    • 同一CA签发的客户端证书、对应私钥
    • CA根证书文件(用于验证服务端身份)

代码改造示例

将原有HTTP协议的Daemon替换为HTTPS实现,新增TLS校验参数即可,改造后代码如下:

# 替换原有的HTTP Daemon为HTTPS实现
my $daemonname = "SOAP::Transport::HTTPS::Daemon";

$daemon = $daemonname
    ->new(
        Scheme => 'https', 
        LocalPort => 8443, # HTTPS默认建议用8443端口,可按需调整
        Listen => 128,
        # 以下为双向TLS核心配置
        SSL_verify_mode => 0x03, # 等价于 VERIFY_PEER | VERIFY_FAIL_IF_NO_PEER_CERT,强制校验客户端证书,无证书直接拒绝连接
        SSL_ca_file => '/path/to/your/ca.crt', # CA根证书路径,用于校验客户端证书
        SSL_cert_file => '/path/to/your/server.crt', # 服务端证书路径
        SSL_key_file => '/path/to/your/server.key', # 服务端私钥路径
        # 若服务端私钥设置了密码,新增以下回调获取密码
        # SSL_passwd_cb => sub { return "your_private_key_password" }
    )
    ->dispatch_to('MyCode')
    ->options({compress_threshold => 10000});

$daemon->handle;

可选增强配置

如果需要对客户端证书做更精细的准入控制(比如只允许指定CN的客户端访问),可以新增自定义校验逻辑:

use IO::Socket::SSL qw(SSL_VERIFY_NONE);

# 在new方法中新增以下参数
SSL_verify_callback => sub {
    my ($ok, $ctx_store, $cert, $depth, $preverify_ok) = @_;
    # 基础校验失败直接拒绝
    return 0 unless $preverify_ok;
    # 获取客户端证书的CN字段
    my $subject = $cert->subject_name;
    my $cn = $subject->get_entry('CN');
    # 仅允许CN在可信列表内的客户端访问
    my %allowed_cn = map { $_ => 1 } qw(client1.example.com client2.example.com);
    return exists $allowed_cn{$cn} ? 1 : 0;
}

注意事项

  • 服务端私钥文件需严格控制访问权限,禁止非授权用户读取
  • 建议提前配置证书过期告警,避免证书过期导致服务不可用
  • 生产环境不要在代码中硬编码私钥密码,建议通过环境变量或者加密配置文件读取

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:15:03