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

Orthanc与pynetDicom间DICOM TLS连接失败问题求助

解决Orthanc与pynetDicom的TLS连接问题

问题背景

本地Mac的Orthanc客户端与EC2上的pynetDicom服务器通过Let's Encrypt证书建立TLS连接时出现异常:

  • openssl测试需加-partialChain才能返回成功码0,但存在意外EOF错误;不加则提示“无法获取颁发者证书”
  • Orthanc发送DICOM数据失败,报错:
    ErrorCode: 9
    ErrorDescription: Error in the network protocol
    ErrorDetails: DicomAssociation - connecting to AET "MY_AET": TLS error: OpenSSL error
    
  • 关闭TLS后连接正常,尝试过NLB终止TLS、pynetDicom层加密、本地Orthanc测试均无效

解决方案

1. 确保Let's Encrypt证书链完整

Let's Encrypt证书需要包含域名证书+中间证书的完整链,单独的域名证书会导致客户端无法验证颁发者:

  • 使用certbot生成的fullchain.pem作为服务器证书文件,该文件已包含完整链
  • 若手动拼接,将域名证书(cert.pem)和中间证书(chain.pem)按顺序合并成一个文件,无多余空行

2. 修正pynetDicom的SSL上下文配置

调整Python SSL上下文,确保证书链正确加载并启用安全协议:

# 初始化TLS上下文
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
# 加载完整证书链和私钥
context.load_cert_chain(certfile="/path/to/fullchain.pem", keyfile="/path/to/privkey.pem")

# 禁用老旧TLS协议,仅保留安全版本
context.options |= ssl.OP_NO_TLSv1 | ssl.OP_NO_TLSv1_1
# 设置安全加密套件(可选)
context.set_ciphers('ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384')

ae.tls_server_context = context

# 启动服务器
assoc = ae.start_server(
    (NODE_IP, NODE_PORT),
    ae_title=AE_TITLE,
    evt_handlers=handlers,
    ssl_context=ae.tls_server_context
)

注意:无需单独调用load_verify_locations,fullchain.pem已包含中间证书

3. 调整NLB的TLS配置(若使用NLB终止加密)

如果在NLB层处理TLS:

  • NLB上传的证书必须是fullchain.pem,不能仅上传域名证书
  • NLB安全策略仅启用TLS 1.2及以上版本
  • 确认目标组正确转发到EC2的pynetDicom端口,且健康检查正常
  • 此时EC2上的pynetDicom无需再配置TLS,直接使用明文连接

4. 验证证书链有效性

使用openssl重新测试,无需加-partialChain:

openssl s_client -connect <你的NLB或EC2 IP>:<端口> -CAfile /etc/ssl/certs/ca-certificates.crt

返回Verify return code: 0 (ok)则证书链配置正确。若仍有问题,检查Mac本地是否包含Let's Encrypt的ISRG Root X1根证书(Mac默认已预装,缺失则手动安装)

5. 配置Orthanc的TLS参数

修改Orthanc配置文件:

  • 设置SslEnabled: true启用TLS
  • 若需验证服务器证书,设置SslVerifyPeers: true,并将SslCaCertificates指向包含ISRG Root X1的证书文件(如Mac的/etc/ssl/certs/ca-certificates.crt)
  • 确认DICOM目标配置的端口为TLS端口(DICOM TLS默认端口1235,自定义端口需对应)

常见问题排查

  • 意外EOF错误:检查EC2安全组是否开放目标端口,同时确认pynetDicom服务器启动后未异常退出
  • 无法获取颁发者证书:确认服务器提供的是完整fullchain.pem,而非单独的域名证书
  • Orthanc OpenSSL错误:查看Orthanc日志获取具体错误码,用openssl errstr <错误码>查询详细原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:37:51