in capi/capi.go [457:512]
func lintSubject(subject string) model.ChainLintResult {
result := model.NewChainLintResult(subject)
if subject == "" {
return result
}
chain, err := certificateUtils.GatherCertificateChain(subject)
if err != nil {
result.Error = err.Error()
result.Opinion.Result = model.FAIL
result.Opinion.Errors = append(result.Opinion.Errors, model.Concern{
Raw: err.Error(),
Interpretation: "The subject test website failed to respond within 10 seconds.",
Advise: "Please check that " + subject + " is up and responding in a reasonable time.",
})
return result
}
if len(chain) <= 1 {
result.Error = fmt.Sprintf("certificate chain contains %d certificates", len(chain))
result.Opinion.Result = model.FAIL
result.Opinion.Errors = append(result.Opinion.Errors, model.Concern{
Raw: result.Error,
Interpretation: "The subject test website failed to provide a certificate chain with at least two certificates.",
Advise: "Please check that " + subject + " is up and responding on an HTTPS endpoint and is not using a trust anchor as the sole certificate.",
})
return result
}
chainWithoutRoot := chain[:len(chain)-1]
clint, err := certlint.LintCerts(chainWithoutRoot)
if err != nil {
result.Error = err.Error()
result.Opinion.Result = model.FAIL
result.Opinion.Errors = append(result.Opinion.Errors, model.Concern{
Raw: err.Error(),
Interpretation: "An internal error appears to have occurred while using certlint",
Advise: "Please report this error.",
})
return result
}
xlint, err := x509lint.LintChain(chainWithoutRoot)
if err != nil {
result.Error = err.Error()
result.Opinion.Result = model.FAIL
result.Opinion.Errors = append(result.Opinion.Errors, model.Concern{
Raw: err.Error(),
Interpretation: "An internal error appears to have occurred while using x509lint",
Advise: "Please report this error.",
})
return result
}
lintResults := make([]model.CertificateLintResult, len(chainWithoutRoot))
for i := 0; i < len(lintResults); i++ {
lintResults[i] = model.NewCertificateLintResult(chainWithoutRoot[i], xlint[i], clint[i])
}
result.Finalize(lintResults[0], lintResults[1:])
return result
}