github.com/zmap/zlint@v1.1.0/lints/lint_ext_name_constraints_not_in_ca.go (about) 1 package lints 2 3 /* 4 * ZLint Copyright 2018 Regents of the University of Michigan 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); you may not 7 * use this file except in compliance with the License. You may obtain a copy 8 * of the License at http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 13 * implied. See the License for the specific language governing 14 * permissions and limitations under the License. 15 */ 16 17 /*********************************************************************** 18 RFC 5280: 4.2.1.10 19 The name constraints extension, which MUST be used only in a CA 20 certificate, indicates a name space within which all subject names in 21 subsequent certificates in a certification path MUST be located. 22 Restrictions apply to the subject distinguished name and apply to 23 subject alternative names. Restrictions apply only when the 24 specified name form is present. If no name of the type is in the 25 certificate, the certificate is acceptable. 26 ***********************************************************************/ 27 28 import ( 29 "github.com/zmap/zcrypto/x509" 30 "github.com/zmap/zlint/util" 31 ) 32 33 type nameConstraintNotCa struct{} 34 35 func (l *nameConstraintNotCa) Initialize() error { 36 return nil 37 } 38 39 func (l *nameConstraintNotCa) CheckApplies(c *x509.Certificate) bool { 40 return util.IsExtInCert(c, util.NameConstOID) 41 } 42 43 func (l *nameConstraintNotCa) Execute(c *x509.Certificate) *LintResult { 44 if !util.IsCACert(c) { 45 return &LintResult{Status: Error} 46 } else { 47 return &LintResult{Status: Pass} 48 } 49 } 50 51 func init() { 52 RegisterLint(&Lint{ 53 Name: "e_ext_name_constraints_not_in_ca", 54 Description: "The name constraints extension MUST only be used in CA certificates", 55 Citation: "RFC 5280: 4.2.1.10", 56 Source: RFC5280, 57 EffectiveDate: util.RFC2459Date, 58 Lint: &nameConstraintNotCa{}, 59 }) 60 }