{"record":{"id":"f237ee92b3cc8f53","repo":"grafana/k6","slug":"failed-to-parse-certificate-w","errorCode":null,"errorMessage":"failed to parse certificate: %w","messagePattern":"failed to parse certificate: %w","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/js/modules/k6/crypto/x509/x509.go","lineNumber":153,"sourceCode":"}\n\n// subject extracts certificate subject\nfunc (mi X509) subject(encoded []byte) Subject {\n\tparsed, err := parseCertificate(encoded)\n\tif err != nil {\n\t\tcommon.Throw(mi.vu.Runtime(), err)\n\t}\n\treturn makeSubject(parsed.Subject)\n}\n\nfunc parseCertificate(encoded []byte) (*x509.Certificate, error) {\n\tdecoded, _ := pem.Decode(encoded)\n\tif decoded == nil {\n\t\treturn nil, fmt.Errorf(\"failed to decode certificate PEM file\")\n\t}\n\tparsed, err := x509.ParseCertificate(decoded.Bytes)\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"failed to parse certificate: %w\", err)\n\t}\n\treturn parsed, nil\n}\n\nfunc makeCertificate(parsed *x509.Certificate) (Certificate, error) {\n\tpublicKey, err := makePublicKey(parsed.PublicKey)\n\tif err != nil {\n\t\treturn Certificate{}, err\n\t}\n\treturn Certificate{\n\t\tSubject:            makeSubject(parsed.Subject),\n\t\tIssuer:             makeIssuer(parsed.Issuer),\n\t\tNotBefore:          iso8601(parsed.NotBefore),\n\t\tNotAfter:           iso8601(parsed.NotAfter),\n\t\tAltNames:           altNames(parsed),\n\t\tSignatureAlgorithm: signatureAlgorithm(parsed.SignatureAlgorithm),\n\t\tFingerPrint:        fingerPrint(parsed),\n\t\tPublicKey:          publicKey,","sourceCodeStart":135,"sourceCodeEnd":171,"githubUrl":"https://github.com/grafana/k6/blob/01ffac6f245854c1b8adc6a69857c76a15f90022/internal/js/modules/k6/crypto/x509/x509.go#L135-L171","documentation":"Returned by parseCertificate when the PEM block decoded successfully but x509.ParseCertificate rejects its DER payload ('%w' carries the x509 error detail). This means the input is well-formed PEM yet not a valid X.509 certificate — e.g. a PEM-wrapped private key, CSR, or a truncated/corrupted certificate body.","triggerScenarios":"Thrown at internal/js/modules/k6/crypto/x509/x509.go:153 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure the PEM content is a certificate, not a key or CSR (check the BEGIN line says CERTIFICATE)","Re-export the certificate from a trusted source to rule out corruption","Read the wrapped x509 error (e.g. 'malformed certificate') for the precise parse failure","Validate the file with openssl x509 -in file.pem -noout to confirm it parses outside k6"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"01ffac6f245854c1b8adc6a69857c76a15f90022","analyzedAt":"2026-08-18T03:05:52.393Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}