Add SSL certificate checker
Implement SSL certificate checking functionality
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
|
||||
package operations
|
||||
|
||||
import (
|
||||
"crypto/x509/pkix"
|
||||
"fmt"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// normalizeDomain cleans and normalizes the domain input
|
||||
func (op *SSLOperation) normalizeDomain(domain string) string {
|
||||
// Remove protocol prefixes
|
||||
domain = strings.Replace(domain, "https://", "", 1)
|
||||
domain = strings.Replace(domain, "http://", "", 1)
|
||||
|
||||
// Remove trailing slash and path
|
||||
if idx := strings.Index(domain, "/"); idx != -1 {
|
||||
domain = domain[:idx]
|
||||
}
|
||||
|
||||
// Trim whitespace
|
||||
domain = strings.TrimSpace(domain)
|
||||
|
||||
return domain
|
||||
}
|
||||
|
||||
// formatDistinguishedName formats the certificate distinguished name
|
||||
func (op *SSLOperation) formatDistinguishedName(name pkix.Name) string {
|
||||
var parts []string
|
||||
|
||||
if name.CommonName != "" {
|
||||
parts = append(parts, fmt.Sprintf("CN=%s", name.CommonName))
|
||||
}
|
||||
|
||||
for _, org := range name.Organization {
|
||||
parts = append(parts, fmt.Sprintf("O=%s", org))
|
||||
}
|
||||
|
||||
for _, orgUnit := range name.OrganizationalUnit {
|
||||
parts = append(parts, fmt.Sprintf("OU=%s", orgUnit))
|
||||
}
|
||||
|
||||
for _, country := range name.Country {
|
||||
parts = append(parts, fmt.Sprintf("C=%s", country))
|
||||
}
|
||||
|
||||
for _, locality := range name.Locality {
|
||||
parts = append(parts, fmt.Sprintf("L=%s", locality))
|
||||
}
|
||||
|
||||
for _, province := range name.Province {
|
||||
parts = append(parts, fmt.Sprintf("ST=%s", province))
|
||||
}
|
||||
|
||||
return strings.Join(parts, ", ")
|
||||
}
|
||||
|
||||
// extractIssuerOrganization extracts only the organization (O=) from the issuer distinguished name
|
||||
func (op *SSLOperation) extractIssuerOrganization(name pkix.Name) string {
|
||||
// Return the first organization if available
|
||||
if len(name.Organization) > 0 {
|
||||
return name.Organization[0]
|
||||
}
|
||||
|
||||
// Fallback to Common Name if no organization
|
||||
if name.CommonName != "" {
|
||||
return name.CommonName
|
||||
}
|
||||
|
||||
// Last resort fallback
|
||||
return "Unknown"
|
||||
}
|
||||
|
||||
// extractSubjectOrganization extracts only the organization (O=) from the subject distinguished name
|
||||
func (op *SSLOperation) extractSubjectOrganization(name pkix.Name) string {
|
||||
// Return the first organization if available
|
||||
if len(name.Organization) > 0 {
|
||||
return name.Organization[0]
|
||||
}
|
||||
|
||||
// Fallback to Common Name if no organization
|
||||
if name.CommonName != "" {
|
||||
return name.CommonName
|
||||
}
|
||||
|
||||
// Last resort fallback
|
||||
return "Unknown"
|
||||
}
|
||||
Reference in New Issue
Block a user