当前位置:首页>Linux>一文讲透 Linux TLS 信任库:从 OpenSSL 到 Java/Go/Python/Node.js 的证书链校验全景

一文讲透 Linux TLS 信任库:从 OpenSSL 到 Java/Go/Python/Node.js 的证书链校验全景

  • 2026-08-18 23:11:34
一文讲透 Linux TLS 信任库:从 OpenSSL 到 Java/Go/Python/Node.js 的证书链校验全景
 
   
           TUTORIAL · 深度技术            2026.08    
   
     

       证书报错靠猜?逐个运行时排查?      

     

       一文讲透 Linux TLS 信任库      

     

       证书链校验全景      

           

       OpenSSL · Java · Go · Python · Node.js · 企业级私有 CA · 国密 SM2/SM3/SM4      

   
 
 
   

     LeisureLinux · 基础架构深度解析    

   
     TLS      PKI      DevOps    
 
 
   

     📦 5 Parts + Conclusion    

   

     👉 滑动    

 
 
   
     

PART 01

     

系统信任库

     

各发行版对比

   
   
     

PART 02

     

OpenSSL

     

哈希索引与校验

   
   
     

PART 03

     

影子信任库

     

Java/Python/Go

   
   
     

PART 04

     

企业级规范

     

CA 分发与诊断

   
   
     

PART ///

     

写在最后

     

最佳实践

   
 
 

   核心议题  

 

   TLS 信任库 · 异构运行时证书链 · 企业级 CA 管理  

 

   Linux 操作系统下的TLS 根证书信任库(System Trust Store)机制异构运行时(OpenSSL/Java/Go/Python/Node.js)的证书校验链 以及 企业级私有 CA 的生命周期管理,是保障内部网络通信安全与 DevOps CI/CD 流水线稳定的核心基础架构之一。  

 

   本文将从底层原理出发,逐一拆解各运行时的证书校验逻辑,并给出企业级场景下的最佳实践。  

 
   
     

       01      

     

       PART      

   
       
     

       Linux 系统级 CA 信任库架构对比      

     

       SYSTEM TRUST STORE · 各发行版对比      

   
 
 

   Linux 各主流发行版在管理底层根证书信任库(Root CA Trust Store)时采用了不同的目录组织结构与提取工具链:  

                                   
发行版体系自定义 CA 导入路径全局 Bundle 路径更新命令底层机制
Debian / Ubuntu/usr/local/share/ca-certificates//etc/ssl/certs/ca-certificates.crtupdate-ca-certificatesc_rehash 哈希符号链接
RHEL / Rocky / Fedora/etc/pki/ca-trust/source/anchors//etc/pki/tls/certs/ca-bundle.crtupdate-ca-trust extractp11-kit 引擎
Alpine Linux/usr/local/share/ca-certificates//etc/ssl/certs/ca-certificates.crtupdate-ca-certificates轻量级索引脚本
Arch Linux/etc/ca-certificates/trust-source/anchors//etc/ssl/certs/ca-certificates.crttrust extract-compat纯 p11-kit 驱动
UOS / Deepin/usr/local/share/ca-certificates//etc/ssl/certs/ca-certificates.crtupdate-ca-certificatesDebian 体系继承

 1.1 统信 UOS / Deepin 特别说明

 统信 UOS(UnionTech OS)及其社区版 Deepin 均基于 Debian 构建,因此 CA 信任库的管理方式与 Debian 完全一致。在信创环境中部署 TLS 通信时,需要注意以下几点:

 

   路径一致:自定义 CA 放入 /usr/local/share/ca-certificates/,执行 update-ca-certificates 即可  

 

   预装根证书:UOS 20 系列默认预装了约 150+ 个国际根 CA,但不包含国密 SM2 根证书  

 

   国密浏览器:UOS 自带的安全浏览器基于 Chromium 魔改,信任库独立于系统  

 

   OpenSSL 版本:UOS 20 默认搭载 OpenSSL 1.1.1,不自带国密算法支持  

 
   .    .    .    bash  
 
   

# UOS 下导入私有 CA 的完整流程

   

cp internal_root_ca.crt /usr/local/share/ca-certificates/

   

update-ca-certificates

       

# 验证证书已加入全局 Bundle

   

grep -c "BEGIN CERTIFICATE" /etc/ssl/certs/ca-certificates.crt

 
 
   
     

       02      

     

       PART      

   
       
     

       OpenSSL 底层哈希索引与证书链校验      

     

       HASH INDEX · CHAIN OF TRUST      

   
 
 

   在 C/C++、Python(标准库 ssl)及依赖 OpenSSL/BoringSSL/LibreSSL 的原生程序中,证书验证遵循双重寻址逻辑  

 1. 证书链(Chain of Trust)递归追溯

 客户端在 TLS Handshake 期间接收服务端发来的叶子证书(Leaf Cert)与中间证书(Intermediate CA)。客户端算法从叶子证书逐级向上验证签名,直至匹配系统信任库中的受信任根证书(Root Anchor)。

 2. 哈希符号链接(Hash Symlinks)

 OpenSSL 的 SSL_CERT_DIR(通常为 /etc/ssl/certs)建立连接时并不逐个遍历所有 .crt 文件,而是使用证书 Subject Name 的 MD5/SHA256 哈希值作为文件名建立符号链接,实现 O(1) 时间复杂度查找:

 
   .    .    .    bash  
 
   

# 获取证书的 OpenSSL 哈希索引值

   

openssl x509 -in internal_root_ca.crt -noout -hash

   

# 输出示例:24a6e923

       

# update-ca-certificates 在背后生成如下软链接:

   

# /etc/ssl/certs/24a6e923.0 -> /usr/local/share/ca-certificates/internal_root_ca.crt

 

 3. 环境变量覆写

 

   SSL_CERT_FILE:强制覆写 OpenSSL 查找的单文件 CA Bundle 路径  

 

   SSL_CERT_DIR:强制覆写 OpenSSL 查找的哈希符号链接目录路径  

 
   
     

       03      

     

       PART      

   
       
     

       应用运行时的201c影子信任库201d      

     

       SHADOW TRUST STORES · JAVA · PYTHON · GO · NODE.JS      

   
 
 

   安全分析与运维排查中最常见的 TLS 报错(如 x509: certificate signed by unknown authorityPKIX path building failed),大部分是因为应用语言运行时绕过了操作系统级的 /etc/ssl/certs,维护了独立的信任库。  

 1. Java Runtime (JVM / JDK) —— 最复杂的证书链验证体系

 Java 是异构运行时中证书链验证机制最复杂、历史包袱最重的一个。它不仅完全绕过了 Linux 系统级 CA 信任库,还维护了一套独立的 PKIX 验证引擎、KeyStore 存储格式和证书链构建算法。

 1.1 核心机制:JVM 的独立信任库

 JVM 完全忽略 Linux 系统级的 /etc/ssl/certs,仅使用自身的 KeyStore 文件作为根证书信任锚点:

                           
JDK 版本cacerts 路径默认格式默认密码
JDK 8 及更早$JAVA_HOME/jre/lib/security/cacertsJKSchangeit
JDK 9 ~ 17$JAVA_HOME/lib/security/cacertsJKS(兼容 PKCS#12)changeit
JDK 18+$JAVA_HOME/lib/security/cacertsPKCS#12(无密码)无需密码
 

   提示  

 

   关键演变:JDK 18+ 的 cacerts 完全从 JKS 格式迁移到 PKCS#12 格式,且变为无密码信任库(passwordless keystore),不再需要指定 changeit 密码。  

 1.2 PKIX 证书链验证算法详解

 Java 使用 PKIX(Public Key Infrastructure X.509)算法进行证书链验证,这是 RFC 5280 定义的标准路径验证算法。验证过程如下:

 
   .    .    .    text  
 
   

客户端收到服务端证书链:[Leaf Cert] → [Intermediate CA] → ... → [Root CA]

       

PKIX 验证步骤:

   

1. 构建证书路径(CertPath):从叶子证书到信任锚点

   

2. 验证每个证书的签名:用上级 CA 的公钥验证下级证书的签名

   

3. 检查有效期:每个证书必须在 validNotBefore 和 validNotAfter 之间

   

4. 检查密钥用法(Key Usage):确保证书可用于 TLS 服务端认证

   

5. 检查 CRL/OCSP:验证证书是否被吊销(可选,取决于配置)

   

6. 检查策略约束(Policy Constraints):企业级场景下的证书策略匹配

   

7. 最终匹配信任锚点:根证书必须在 cacerts 信任库中

 

 1.3 系统属性覆写机制

 
   .    .    .    bash  
 
   

# 方式一:JVM 启动参数(推荐,优先级最高)

   

java -Djavax.net.ssl.trustStore=/path/to/custom-truststore.jks \

   

    -Djavax.net.ssl.trustStorePassword=changeit \

   

    -Djavax.net.ssl.trustStoreType=JKS \

   

    -jar your-app.jar

       

# 方式二:代码中动态设置(在 SSLContext 初始化之前)

   

System.setProperty("javax.net.ssl.trustStore", "/path/to/custom-truststore.jks");

   

System.setProperty("javax.net.ssl.trustStorePassword", "changeit");

   

System.setProperty("javax.net.ssl.trustStoreType", "JKS");

 

 优先级规则:

 
   1    

     javax.net.ssl.trustStore 系统属性(最高优先级)    

 
 
   2    

     $JAVA_HOME/lib/security/cacerts(默认回退)    

 
 
   3    

     如果指定的 trustStore 文件不存在,JVM 会抛出 FileNotFoundException,不会自动回退到系统信任库    

 

 1.4 keytool 完整操作指南

 keytool 是 JDK 自带的密钥和证书管理工具,用于操作 cacerts 信任库:

 
   .    .    .    bash  
 
   

# 1. 列出 cacerts 中所有受信任的根证书

   

keytool -list -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit

       

# 2. 列出所有证书的详细信息(含指纹)

   

keytool -list -v -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit | grep -E "别名|Owner|Issuer"

       

# 3. 导入私有 CA 根证书到 cacerts(企业内网场景)

   

keytool -importcert -trustcacerts -alias internal-root-ca \

   

 -file /etc/pki/ca-trust/source/anchors/internal_root_ca.crt \

   

 -keystore $JAVA_HOME/lib/security/cacerts \

   

 -storepass changeit -noprompt

       

# 4. 删除已导入的证书

   

keytool -delete -alias internal-root-ca \

   

 -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit

 

 1.5 常见错误排查

 错误一:PKIX path building failed

 
   .    .    .    text  
 
   

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException:

   

PKIX path building failed: unable to find valid certification path to requested target

 
 

   注意  

 

   根因:服务端证书的根 CA 不在 JVM 的 cacerts 信任库中,或服务端未完整下发中间证书链。  

 
   .    .    .    bash  
 
   

# 排查步骤

   

# 1. 提取服务端完整证书链

   

openssl s_client -connect api.internal.domain:443 -showcerts -servername api.internal.domain

       

# 2. 检查 cacerts 中是否包含对应的根证书

   

keytool -list -keystore $JAVA_HOME/lib/security/cacerts | grep -i "your-ca-name"

       

# 3. 启用 JVM SSL 调试日志

   

java -Djavax.net.debug=ssl,handshake -jar your-app.jar

 

 1.6 容器化场景的特殊处理

 
   .    .    .    dockerfile  
 
   

# 方案一:在构建阶段注入私有 CA(推荐)

   

FROM openjdk:17-jdk-slim

       

COPY internal_root_ca.crt /usr/local/share/ca-certificates/

   

RUN update-ca-certificates

       

RUN keytool -importcert -trustcacerts -alias internal-root-ca \

   

   -file /usr/local/share/ca-certificates/internal_root_ca.crt \

   

   -keystore $JAVA_HOME/lib/security/cacerts \

   

   -storepass changeit -noprompt

       

# 方案三:使用 JDK 18+ 的无密码 PKCS#12(最简洁)

   

FROM openjdk:18-jdk-slim

   

COPY internal_root_ca.crt /tmp/

   

RUN keytool -importcert -trustcacerts -alias internal-root-ca \

   

   -file /tmp/internal_root_ca.crt \

   

   -keystore $JAVA_HOME/lib/security/cacerts -noprompt

 

 1.7 Spring Boot / Tomcat 框架的特殊处理

 
   .    .    .    yaml  
 
   

# application.yml - Spring Boot 2.7+ / 3.x

   

server:

   

 ssl:

   

   enabled: true

   

   key-store: classpath:keystore.p12

   

   key-store-password: changeit

   

   key-store-type: PKCS12

   

   key-alias: tomcat

   

   trust-store: classpath:truststore.p12

   

   trust-store-password: changeit

   

   trust-store-type: PKCS12

   

   client-auth: need  # mTLS

 

 1.8 JDK 国密(SM2/SM3/SM4)配置

 在信创合规场景中,Java 应用需要支持国密算法。标准 JDK 不包含国密实现,需要通过 Security Provider 机制注入。三种主流方案对比:

                           
方案适用场景优点缺点
Bouncy Castle通用场景功能最全需额外引入 JAR
腾讯 Kona腾讯系生态国密 TLS 优化生态相对封闭
阿里 Dragonwell阿里云/信创JDK 内置支持仅限 Dragonwell

 方案一:Bouncy Castle Provider

 
   .    .    .    java  
 
   

// 注册 Bouncy Castle 为 Security Provider

   

import org.bouncycastle.jce.provider.BouncyCastleProvider;

   

import java.security.Security;

       

// 在应用启动时注册

   

Security.addProvider(new BouncyCastleProvider());

       

// 验证 SM3 哈希可用

   

MessageDigest md = MessageDigest.getInstance("SM3", "BC");

   

byte[] hash = md.digest("hello".getBytes());

 

 方案二:腾讯 Kona Provider

 
   .    .    .    java  
 
   

import com.tencent.kona.KonaProvider;

   

import com.tencent.kona.ssl.KonaSSLProvider;

   

import java.security.Security;

       

// 注册 Kona Provider

   

Security.addProvider(new KonaProvider());

   

Security.addProvider(new KonaSSLProvider());

       

// 使用国密 TLS 协议(TLCP,即 GM/T 0024)

   

SSLContext ctx = SSLContext.getInstance("TLCP", "KonaSSL");

   

ctx.init(null, null, null);

 

 方案三:阿里 Dragonwell 内置国密

 
   .    .    .    bash  
 
   

# 启用国密支持(JVM 启动参数)

   

java -Dcom.alibaba.dragonwell.security.gm.enable=true \

   

    -Dcom.alibaba.dragonwell.security.gm.tls.enable=true \

   

    -jar your-app.jar

 

 国密 HTTPS 通信完整示例(基于腾讯 Kona):

 
   .    .    .    java  
 
   

import com.tencent.kona.KonaProvider;

   

import com.tencent.kona.ssl.KonaSSLProvider;

   

import java.security.Security;

   

import javax.net.ssl.*;

   

import java.net.http.*;

       

public class GmHttpsClient {

   

   static {

   

       Security.addProvider(new KonaProvider());

   

       Security.addProvider(new KonaSSLProvider());

   

   }

       

   public static void main(String[] args) throws Exception {

   

       SSLContext ctx = SSLContext.getInstance("TLCP", "KonaSSL");

   

       ctx.init(null, null, null);

       

       HttpClient client = HttpClient.newBuilder()

   

           .sslContext(ctx)

   

           .build();

       

       HttpRequest request = HttpRequest.newBuilder()

   

           .uri(URI.create("https://gm-api.internal.domain/health"))

   

           .build();

       

       HttpResponse<String> response = client.send(

   

           request, HttpResponse.BodyHandlers.ofString());

       

       System.out.println("状态码: " + response.statusCode());

   

   }

   

}

 

 2. Python(requests / pip)

 Python 的 requests 库及 pip 默认使用了第三方 PyPI 包 certifi 的 CA Bundle,隔离于操作系统之外。统一管控方案:在全局环境变量配置中指定:

 
   .    .    .    bash  
 
   

export REQUESTS_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

   

export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

 

 3. Go (Golang) 微服务与容器化构建

 Go 标准库 crypto/x509 在 Linux 环境下会顺次扫描硬编码的系统路径(如 /etc/ssl/certs/ca-certificates.crt, /etc/pki/tls/certs/ca-bundle.crt)。

 

   注意  

 

   容器安全陷阱:在使用 scratch 或极简 distroless 基础镜像构建 Go 静态二进制微服务时,若未从编译阶段拷贝系统 CA 文件到镜像中,Go 程序将缺乏任何根信任锚点,导致所有 HTTPS/mTLS 请求直接断开。  

 4. Node.js

 Node.js 在编译期将 Mozilla CA 信任链直接静态打包进二进制文件中。私有 CA 挂载机制:通过环境变量声明额外的 CA 路径:

 
   .    .    .    bash  
 
   

export NODE_EXTRA_CA_CERTS=/usr/local/share/ca-certificates/internal_root_ca.crt

 
 
   
     

       04      

     

       PART      

   
       
     

       企业级私有 CA 分发与排查规范      

     

       ENTERPRISE CA · DISTRIBUTION · DIAGNOSTICS      

   
 

 1. Debian/Ubuntu/UOS 导入流程

 
   .    .    .    bash  
 
   

# 1. 复制私有 CA 根证书(扩展名必须为 .crt)

   

cp internal_root_ca.crt /usr/local/share/ca-certificates/internal_root_ca.crt

       

# 2. 检查全局配置文件(如有排除需求)

   

vim /etc/ca-certificates.conf

       

# 3. 重新构建哈希符号链接与 Bundle

   

update-ca-certificates --fresh

 

 2. RHEL/Rocky Linux 导入流程

 
   .    .    .    bash  
 
   

# 1. 复制证书至 anchors 目录(支持 .crt / .pem 格式)

   

cp internal_root_ca.crt /etc/pki/ca-trust/source/anchors/

       

# 2. 提取并更新系统全局 trust store

   

update-ca-trust extract

 

 3. Java 私有 CA 全量注入脚本(企业级)

 
   .    .    .    bash  
 
   

#!/bin/bash

   

# 企业级 Java cacerts 私有 CA 批量注入脚本

   

set -euo pipefail

       

JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-17-openjdk}

   

CA_DIR="/etc/pki/ca-trust/source/anchors"

   

CACERTS="$JAVA_HOME/lib/security/cacerts"

       

# 检测 JDK 版本

   

JDK_VERSION=$($JAVA_HOME/bin/java -version 2>&1 | head -1 | awk -F '"' '{print $2}' | cut -d. -f1)

   

echo "检测到 JDK 版本: $JDK_VERSION"

       

# JDK 18+ 无需密码

   

if [ "$JDK_VERSION" -ge 18 ]; then

   

   STORE_PASS=""

   

   echo "JDK 18+ 使用无密码 PKCS#12 格式"

   

else

   

   STORE_PASS="changeit"

   

   echo "JDK < 18 使用 JKS 格式,密码: changeit"

   

fi

       

# 遍历 anchors 目录中的所有 CA 证书

   

for cert_file in "$CA_DIR"/*.{crt,pem}; do

   

   [ -f "$cert_file" ] || continue

   

   alias_name=$(basename "$cert_file" | sed 's/\.\(crt\|pem\)$//')

   

   echo "导入证书: $alias_name"

   

   if [ -n "$STORE_PASS" ]; then

   

       $JAVA_HOME/bin/keytool -importcert -trustcacerts \

   

           -alias "$alias_name" -file "$cert_file" \

   

           -keystore "$CACERTS" -storepass "$STORE_PASS" -noprompt

   

   else

   

       $JAVA_HOME/bin/keytool -importcert -trustcacerts \

   

           -alias "$alias_name" -file "$cert_file" \

   

           -keystore "$CACERTS" -noprompt

   

   fi

   

done

   

echo "私有 CA 证书批量注入完成"

 

 4. 架构师级 TLS 链式诊断 CLI 管道

 
   .    .    .    bash  
 
   

# 1. 提取服务端完整证书链

   

openssl s_client -connect api.internal.domain:443 -showcerts \

   

   -servername api.internal.domain

       

# 2. 显式指定系统 CA Bundle 验证

   

openssl s_client -connect api.internal.domain:443 \

   

   -CAfile /etc/ssl/certs/ca-certificates.crt \

   

   -servername api.internal.domain

       

# 3. 校验证书与私钥的 Modulus 匹配度

   

openssl x509 -noout -modulus -in server.crt | openssl md5

   

openssl rsa -noout -modulus -in server.key | openssl md5

       

# 4. Java 专属:启用 SSL 调试日志

   

java -Djavax.net.debug=ssl,handshake,truststore -jar your-app.jar 2>&1 \

   

   | grep -E "certificate|chain|trust"

       

# 5. 检查 cacerts 中是否包含特定 CA

   

keytool -list -keystore $JAVA_HOME/lib/security/cacerts | grep -i "your-ca-name"

 
 
   
     

       ///      

     

       LAST      

   
       
     

       总结与最佳实践      

     

       SUMMARY · BEST PRACTICES      

   
 

 异构运行时信任库统一管控策略

                                               
运行时信任库位置统一管控方案
OpenSSL/C/C++/etc/ssl/certsupdate-ca-certificates
Java (JDK < 18)$JAVA_HOME/lib/security/cacertskeytool -importcert
Java (JDK 18+)cacerts (PKCS#12)keytool -importcert(无密码)
Java 国密cacerts + Security ProviderBouncy Castle / Kona / Dragonwell
Pythoncertifi 包内嵌REQUESTS_CA_BUNDLE 环境变量
Go系统路径硬编码确保容器镜像包含 /etc/ssl/certs
Node.js编译期内嵌NODE_EXTRA_CA_CERTS 环境变量
UOS / Deepin同 Debian 体系update-ca-certificates

 企业级最佳实践:

 
   1    

     建立统一的私有 CA 分发流水线:将私有 CA 证书导入系统信任库后,自动触发各运行时的信任库更新    

 
 
   2    

     容器化场景:在 Dockerfile 构建阶段完成所有信任库注入,避免运行时依赖    

 
 
   3    

     JDK 18+ 迁移:尽快迁移到 JDK 18+ 的无密码 PKCS#12 格式,简化运维    

 
 
   4    

     信创合规:优先选择 Dragonwell JDK 获得内置国密支持,或使用腾讯 Kona 作为通用方案    

 
 
   5    

     监控告警:对证书有效期、CRL/OCSP 检查失败等事件建立监控告警    

 
 
   6    

     文档化:维护一份各运行时的信任库路径和更新命令清单,作为运维手册的一部分    

 

深度排障:update-ca-certificates 遭遇国密 OID 解析异常的底层治理
深度解析:当 CRL 过期,为何信创电脑会集体“断网”?

 

   我是 LeisureLinux,大智若愚,精通 Linux 底层架构。关注基础架构与 DevOps 实践,用武侠风范切磋技术。  

 

   如果这篇对你排查 TLS 证书问题有帮助,欢迎留言交流。  

 

   既然看到这里了,如果觉得有用,随手点个赞、在看、转发三连吧。  

 
   
           点赞    
   
           在看    
   
           转发    
 
 

   THANKS FOR READING  

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-08-21 13:35:26 HTTP/2.0 GET : https://f.mffb.com.cn/a/508079.html
  2. 运行时间 : 0.434329s [ 吞吐率:2.30req/s ] 内存消耗:5,119.23kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=7245a67ccb5e98db1d42ed896827f39a
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.001132s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.001688s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.027346s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.029821s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.001702s ]
  6. SELECT * FROM `set` [ RunTime:0.001744s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.001540s ]
  8. SELECT * FROM `article` WHERE `id` = 508079 LIMIT 1 [ RunTime:0.004100s ]
  9. UPDATE `article` SET `lasttime` = 1787290526 WHERE `id` = 508079 [ RunTime:0.028920s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 67 LIMIT 1 [ RunTime:0.041989s ]
  11. SELECT * FROM `article` WHERE `id` < 508079 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001600s ]
  12. SELECT * FROM `article` WHERE `id` > 508079 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.054578s ]
  13. SELECT * FROM `article` WHERE `id` < 508079 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.059756s ]
  14. SELECT * FROM `article` WHERE `id` < 508079 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.009388s ]
  15. SELECT * FROM `article` WHERE `id` < 508079 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.005310s ]
0.438056s