{"record":{"id":"0bb9e8665f3ea475","repo":"caddyserver/caddy","slug":"failed-parsing-certificate-chain-w","errorCode":null,"errorMessage":"failed parsing certificate chain: %w","messagePattern":"failed parsing certificate chain: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"modules/caddypki/crypto.go","lineNumber":50,"sourceCode":"\nfunc pemDecodeCertificate(pemDER []byte) (*x509.Certificate, error) {\n\tpemBlock, remaining := pem.Decode(pemDER)\n\tif pemBlock == nil {\n\t\treturn nil, fmt.Errorf(\"no PEM block found\")\n\t}\n\tif len(remaining) > 0 {\n\t\treturn nil, fmt.Errorf(\"input contained more than a single PEM block\")\n\t}\n\tif pemBlock.Type != \"CERTIFICATE\" {\n\t\treturn nil, fmt.Errorf(\"expected PEM block type to be CERTIFICATE, but got '%s'\", pemBlock.Type)\n\t}\n\treturn x509.ParseCertificate(pemBlock.Bytes)\n}\n\nfunc pemDecodeCertificateChain(pemDER []byte) ([]*x509.Certificate, error) {\n\tchain, err := pemutil.ParseCertificateBundle(pemDER)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed parsing certificate chain: %w\", err)\n\t}\n\n\treturn chain, nil\n}\n\nfunc pemEncodeCert(der []byte) ([]byte, error) {\n\treturn pemEncode(\"CERTIFICATE\", der)\n}\n\nfunc pemEncode(blockType string, b []byte) ([]byte, error) {\n\tvar buf bytes.Buffer\n\terr := pem.Encode(&buf, &pem.Block{Type: blockType, Bytes: b})\n\treturn buf.Bytes(), err\n}\n\nfunc trusted(cert *x509.Certificate) bool {\n\tchains, err := cert.Verify(x509.VerifyOptions{})\n\treturn len(chains) > 0 && err == nil","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/caddyserver/caddy/blob/50e54ee279aa1e504fe218ca49ab6ae16c100410/modules/caddypki/crypto.go#L32-L68","documentation":"Error \"failed parsing certificate chain: %w\" thrown in caddyserver/caddy.","triggerScenarios":"Thrown at modules/caddypki/crypto.go:50 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure every certificate in the chain is valid X.509; the wrapped error identifies the failing certificate."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"50e54ee279aa1e504fe218ca49ab6ae16c100410","analyzedAt":"2026-08-15T09:20:21.641Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}