📄 cview.vbs
字号:
ErrorStrings(7) = "Cyclic chain"
ErrorStrings(8) = "Invalid extension"
ErrorStrings(9) = "Invalid policy constraints"
ErrorStrings(10) = "Invalid basic constraints"
ErrorStrings(11) = "Invalid name constraints"
ErrorStrings(12) = "Not supported name constraint"
ErrorStrings(13) = "Not defined name constraint"
ErrorStrings(14) = "Not permitted name constraint"
ErrorStrings(15) = "Has excluded name constraint"
ErrorStrings(16) = "Offline revocation"
ErrorStrings(17) = "No issuance chain policy"
ErrorStrings(18) = "Partial chain"
ErrorStrings(19) = "CTL invalid time"
ErrorStrings(20) = "CTL invalid signature"
ErrorStrings(21) = "CTL invalid usage"
' Initialize.
GetStatusString = ""
Dim sIndex
For sIndex = LBound(StatusCodes) To UBound(StatusCodes)
' Check status.
If (Status And StatusCodes(sIndex)) = StatusCodes(sIndex) Then
If Len(GetStatusString) > 0 Then
GetStatusString = GetStatusString & ", "
End If
GetStatusString = GetStatusString & ErrorStrings(sIndex)
End If
Next
' See if we have any unknown trust status.
If (Status And Not KNOWN_TRUST_STATUS_MASK) <> 0 Then
If Len(GetStatusString) > 0 Then
GetStatusString = GetStatusString & ", "
End If
GetStatusString = GetStatusString & "Unknown trust error"
End If
End Function ' End GetStatusString
'******************************************************************************
'
' Subroutine: DisplayCertificate
'
' Synopsis : Display the certificate.
'
' Parameter : Chain - The chain object containing the certificate to be
' displayed.
' cIndex - Index of the certificate to be displayed.
'
'******************************************************************************
Sub DisplayCertificate (Chain, cIndex)
' Turn on exception handling, since some methods, such as
' Certificate.Template and PrivateKey.IsExportable, are not available
' in some down level platforms.
On Error Resume Next
Const CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME = 2
Const CAPICOM_CERT_INFO_SUBJECT_UPN = 4
Const CAPICOM_CERT_INFO_SUBJECT_DNS_NAME = 6
Const CAPICOM_ENCODED_DATA_FORMAT_MULTI_LINES = 1
Const CAPICOM_CERT_POLICIES_OID = "2.5.29.32"
Dim KeySpecStrings(2)
KeySpecStrings(0) = "Unknown"
KeySpecStrings(1) = "Exchange"
KeySpecStrings(2) = "Signature"
Dim ProviderTypes(24)
ProviderTypes(0) = "Unknown"
ProviderTypes(1) = "PROV_RSA_FULL"
ProviderTypes(2) = "PROV_RSA_SIG"
ProviderTypes(3) = "PROV_DSS"
ProviderTypes(4) = "PROV_FORTEZZA"
ProviderTypes(5) = "PROV_MS_EXCHANGE"
ProviderTypes(6) = "PROV_SSL"
ProviderTypes(7) = "PROV_STT_MER"
ProviderTypes(8) = "PROV_STT_ACQ"
ProviderTypes(9) = "PROV_STT_BRND"
ProviderTypes(10) = "PROV_STT_ROOT"
ProviderTypes(11) = "PROV_STT_ISS"
ProviderTypes(12) = "PROV_RSA_SCHANNEL"
ProviderTypes(13) = "PROV_DSS_DH"
ProviderTypes(14) = "PROV_EC_ECDSA_SIG"
ProviderTypes(15) = "PROV_EC_ECNRA_SIG"
ProviderTypes(16) = "PROV_EC_ECDSA_FULL"
ProviderTypes(17) = "PROV_EC_ECNRA_FULL"
ProviderTypes(18) = "PROV_DH_SCHANNEL"
ProviderTypes(20) = "PROV_SPYRUS_LYNKS"
ProviderTypes(21) = "PROV_RNG"
ProviderTypes(22) = "PROV_INTEL_SEC"
ProviderTypes(23) = "PROV_REPLACE_OWF"
ProviderTypes(24) = "PROV_RSA_AES"
Dim iIndex : iIndex = 0
Dim Certificate
Set Certificate = Chain.Certificates.Item(cIndex)
Wscript.Stdout.Writeline "=== Certificate " & CStr(cIndex) & " of " & CStr(Chain.Certificates.Count) & " (status = 0x" & Hex(Chain.Status(cIndex)) & ") ==="
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "Subject Name:"
Wscript.Stdout.Writeline " Simple name = " & Certificate.SubjectName
Wscript.Stdout.Writeline " Email name = " & Certificate.GetInfo(CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME)
Wscript.Stdout.Writeline " UPN name = " & Certificate.GetInfo(CAPICOM_CERT_INFO_SUBJECT_UPN)
Wscript.Stdout.Writeline " DNS name = " & Certificate.GetInfo(CAPICOM_CERT_INFO_SUBJECT_DNS_NAME)
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "Issuer Name: " & Certificate.IssuerName
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "Serial Number: " & Certificate.SerialNumber
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "Not Before: " & Certificate.ValidFromDate
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "Not After: " & Certificate.ValidToDate
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "SHA1 Hash: " & Certificate.Thumbprint
Wscript.Stdout.Writeline
If Chain.Status(cIndex) = 0 Then
Wscript.Stdout.Writeline "IsValid: True"
Else
Wscript.Stdout.Writeline "IsValid: False"
End If
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "Archived: " & Certificate.Archived
Wscript.Stdout.Writeline
If Certificate.BasicConstraints.IsPresent Then
Wscript.Stdout.Writeline "Basic Constraints:"
Wscript.Stdout.Writeline " Critical = " & Certificate.BasicConstraints.IsCritical
Wscript.Stdout.Writeline " CA = " & Certificate.BasicConstraints.IsCertificateAuthority
Wscript.stdout.Write " PathLenConstraint = "
If Certificate.BasicConstraints.IsPathLenConstraintPresent Then
Wscript.Stdout.Writeline CStr(Certificate.BasicConstraints.PathLenConstraint)
Else
Wscript.Stdout.Writeline "Not present."
End If
Else
Wscript.Stdout.Writeline "Basic Constraints: Not present."
End If
Wscript.Stdout.Writeline
If Certificate.KeyUsage.IsPresent Then
Wscript.Stdout.Writeline "Key Usage:"
Wscript.Stdout.Writeline " Critical = "& Certificate.KeyUsage.IsCritical
Wscript.Stdout.Writeline " IsDigitalSignatureEnabled = " & Certificate.KeyUsage.IsDigitalSignatureEnabled
Wscript.Stdout.Writeline " IsNonRepudiationEnabled = " & Certificate.KeyUsage.IsNonRepudiationEnabled
Wscript.Stdout.Writeline " IsKeyEnciphermentEnabled = " & Certificate.KeyUsage.IsKeyEnciphermentEnabled
Wscript.Stdout.Writeline " IsDataEnciphermentEnabled = " & Certificate.KeyUsage.IsDataEnciphermentEnabled
Wscript.Stdout.Writeline " IsKeyAgreementEnabled = " & Certificate.KeyUsage.IsKeyAgreementEnabled
Wscript.Stdout.Writeline " IsKeyCertSignEnabled = " & Certificate.KeyUsage.IsKeyCertSignEnabled
Wscript.Stdout.Writeline " IsCRLSignEnabled = " & Certificate.KeyUsage.IsCRLSignEnabled
Wscript.Stdout.Writeline " IsEncipherOnlyEnabled = " & Certificate.KeyUsage.IsEncipherOnlyEnabled
Wscript.Stdout.Writeline " IsDecipherOnlyEnabled = " & Certificate.KeyUsage.IsDecipherOnlyEnabled
Else
Wscript.Stdout.Writeline "Key Usage: Not present."
End If
Wscript.Stdout.Writeline
If Certificate.ExtendedKeyUsage.IsPresent Then
If Certificate.ExtendedKeyUsage.EKUs.Count > 0 Then
Dim OID
Set OID = CreateObject("CAPICOM.OID")
Wscript.Stdout.Writeline "Extended Key Usage:"
Wscript.Stdout.Writeline " Critical = " & Certificate.ExtendedKeyUsage.IsCritical
Dim EKU
For Each EKU In Certificate.ExtendedKeyUsage.EKUs
OID.Value = EKU.OID
Wscript.Stdout.Writeline " " & OID.FriendlyName & " (" & OID.Value & ")"
Next
Set OID = Nothing
Else
Wscript.Stdout.Writeline "Extended Key Usage: Not valid for any usage."
Wscript.Stdout.Writeline " Critical = " & Certificate.ExtendedKeyUsage.IsCritical
End If
Else
Wscript.Stdout.Writeline "Extended Key Usage: Not present (valid for all usages)."
End If
Wscript.Stdout.Writeline
If Certificate.Template.IsPresent Then
Wscript.Stdout.Writeline "Template:"
Wscript.Stdout.Writeline " Critical = " & Certificate.Template.IsCritical
Wscript.Stdout.Writeline " Name = " & Certificate.Template.Name
Wscript.Stdout.Writeline " OID = " & Certificate.Template.OID.FriendlyName & "(" & Certificate.Template.OID.Value & ")"
Wscript.Stdout.Writeline " Major = " & CStr(Certificate.Template.MajorVersion)
Wscript.Stdout.Writeline " Minor = " & CStr(Certificate.Template.MinorVersion)
Else
Wscript.Stdout.Writeline "Template: Not present."
End If
Wscript.Stdout.Writeline
Wscript.Stdout.Writeline "Public Key:"
Wscript.Stdout.Writeline " Algorithm = " & Certificate.PublicKey.Algorithm.FriendlyName & "(" & Certificate.PublicKey.Algorithm.Value & ")"
Wscript.Stdout.Writeline " Length = " & CStr(Certificate.PublicKey.Length) & " bits"
Wscript.Stdout.Writeline " Key blob = " & Certificate.PublicKey.EncodedKey.Format()
Wscript.Stdout.Writeline " Parameters = " & Certificate.PublicKey.EncodedParameters.Format()
If Certificate.HasPrivateKey Then
Wscript.Stdout.Writeline "Private Key:"
Wscript.Stdout.Writeline " Container name = " & Certificate.PrivateKey.ContainerName
Wscript.Stdout.Writeline " Unique name = " & Certificate.PrivateKey.UniqueContainerName
Wscript.Stdout.Writeline " Provider name = " & Certificate.PrivateKey.ProviderName
Wscript.StdOut.Write " Provider type = "
If Certificate.PrivateKey.ProviderType > UBound(ProviderTypes) Then
Wscript.Stdout.Writeline ProviderTypes(0) & " (" & CStr(Certificate.PrivateKey.ProviderType) & ")"
Else
Wscript.Stdout.Writeline ProviderTypes(Certificate.PrivateKey.ProviderType) & " (" & CStr(Certificate.PrivateKey.ProviderType) & ")"
End If
Wscript.StdOut.Write " Key spec = "
If Certificate.PrivateKey.KeySpec > UBound(KeySpecStrings) Then
Wscript.Stdout.Writeline KeySpecStrings(0) & " (" & CStr(Certificate.PrivateKey.KeySpec) & ")"
Else
Wscript.Stdout.Writeline KeySpecStrings(Certificate.PrivateKey.KeySpec) & " (" & CStr(Certificate.PrivateKey.KeySpec) & ")"
End If
Wscript.Stdout.Writeline " Accessible = " & Certificate.PrivateKey.IsAccessible
Wscript.Stdout.Writeline " Protected = " & Certificate.PrivateKey.IsProtected
Wscript.Stdout.Writeline " Exportable = " & Certificate.PrivateKey.IsExportable
Wscript.Stdout.Writeline " Removable = " & Certificate.PrivateKey.IsRemovable
Wscript.Stdout.Writeline " Machine keyset = " & Certificate.PrivateKey.IsMachineKeyset
Wscript.Stdout.Writeline " Hardware storage = " & Certificate.PrivateKey.IsHardwareDevice
Else
Wscript.Stdout.Writeline "Private Key: Not found."
End If
Wscript.Stdout.Writeline
If Verbose Then
iIndex = 0
Dim Extension
For Each Extension In Certificate.Extensions
iIndex = iIndex + 1
Wscript.Stdout.Writeline "Extension #" & CStr(iIndex) & ": " & Extension.OID.FriendlyName & "(" & Extension.OID.Value & ")"
Wscript.Stdout.Writeline " " & Extension.EncodedData.Format(CAPICOM_ENCODED_DATA_FORMAT_MULTI_LINES)
If Not Extension.EncodedData.Decoder Is Nothing Then
Select Case Extension.OID.Value
Case CAPICOM_CERT_POLICIES_OID
Dim CertPolicies
Set CertPolicies = Extension.EncodedData.Decoder
Wscript.Stdout.Writeline "Decoded Certificate Policies: " & CStr(CertPolicies.Count) & " PolicyInformation(s)"
Dim pIndex : pIndex = 0
Dim PolicyInformation
For Each PolicyInformation In CertPolicies
pIndex = pIndex + 1
Wscript.Stdout.Writeline " PolicyInformation #" & CStr(pIndex) & ": " & CStr(PolicyInformation.Qualifiers.Count) & " Qualifier(s)"
Wscript.Stdout.Writeline " OID = " & PolicyInformation.OID.FriendlyName & "(" & PolicyInformation.OID.Value & ")"
Dim qIndex : qIndex = 0
Dim Qualifier
For Each Qualifier In PolicyInformation.Qualifiers
qIndex = qIndex + 1
Wscript.Stdout.Writeline " Qualifier #" & CStr(qIndex) & ":"
Wscript.Stdout.Writeline " OID = " & Qualifier.OID.FriendlyName & "(" & Qualifier.OID.Value & ")"
Wscript.Stdout.Writeline " CPS URI = " & Qualifier.CPSPointer
Wscript.Stdout.Writeline " Organization name = " & Qualifier.OrganizationName
Wscript.Stdout.Write " Notice number(s) = "
If Not Qualifier.NoticeNumbers Is Nothing Then
Dim nIndex
For nIndex = 1 to Qualifier.NoticeNumbers.Count
If nIndex > 1 Then
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -