📄 certdetailsviewpanel.java
字号:
data.add(versionRow);
Vector serialNumberRow = new Vector();
serialNumberRow.add(new JLabel("Serial Number", CertViewer.attributeIcon, SwingConstants.LEFT));
serialNumberRow.add(CBParse.bytes2Hex(cert.getSerialNumber().toByteArray()));
data.add(serialNumberRow);
Vector sigAlgRow = new Vector();
sigAlgRow.add(new JLabel("Signature Algorithm", CertViewer.attributeIcon, SwingConstants.LEFT));
sigAlgRow.add(cert.getSigAlgName());
data.add(sigAlgRow);
Vector issuerRow = new Vector();
issuerRow.add(new JLabel("Issuer", CertViewer.attributeIcon, SwingConstants.LEFT));
issuerRow.add(cert.getIssuerX500Principal().getName());
data.add(issuerRow);
Vector fromRow = new Vector();
fromRow.add(new JLabel("Valid From", CertViewer.attributeIcon, SwingConstants.LEFT));
fromRow.add(cert.getNotBefore());
data.add(fromRow);
Vector toRow = new Vector();
toRow.add(new JLabel("Valid To", CertViewer.attributeIcon, SwingConstants.LEFT));
toRow.add(cert.getNotAfter());
data.add(toRow);
Vector subjectRow = new Vector();
subjectRow.add(new JLabel("Subject", CertViewer.attributeIcon, SwingConstants.LEFT));
// debugPrint();
subjectRow.add(cert.getSubjectX500Principal().getName());
data.add(subjectRow);
Vector publicKeyRow = new Vector();
publicKeyRow.add(new JLabel("Public Key", CertViewer.attributeIcon, SwingConstants.LEFT));
PublicKey pubKey = cert.getPublicKey();
String publicKeyString = pubKey.getAlgorithm();
if (pubKey instanceof RSAPublicKey)
publicKeyString = publicKeyString + " (" + ((RSAPublicKey) pubKey).getModulus().bitLength() + " Bits)";
else if (pubKey instanceof DSAPublicKey)
publicKeyString = publicKeyString + " (" + ((DSAPublicKey) pubKey).getY().bitLength() + " Bits)";
publicKeyRow.add(publicKeyString);
/*
if (pubKey instanceof RSAPublicKey)
briefDetails.put(publicKeyString, CBUtility.bytes2HexSplit(((RSAPublicKey)pubKey).getModulus().toByteArray(), 4, 36));
else
briefDetails.put(publicKeyString, StaticUtil.bytes2Hex(pubKey.getEncoded(), 4, 36));
*/
data.add(publicKeyRow);
}
if (viewMode == 0 || viewMode == 2)
{
Set nonCritSet = cert.getNonCriticalExtensionOIDs();
if (nonCritSet != null && !nonCritSet.isEmpty())
{
for (Iterator i = nonCritSet.iterator(); i.hasNext();)
{
String oid = (String)i.next();
Vector nonCritRow = new Vector();
String extname = getNameFromOID(oid);
nonCritRow.add(new JLabel(extname, CertViewer.extensionIcon, SwingConstants.LEFT));
addExtDetails(nonCritRow,
printext(extname, cert.getExtensionValue(oid)).toString());
data.add(nonCritRow);
}
}
}
if (viewMode == 0 || viewMode == 2 || viewMode == 3)
{
Set critSet = cert.getCriticalExtensionOIDs();
if (critSet != null && !critSet.isEmpty())
{
for (Iterator i = critSet.iterator(); i.hasNext();)
{
String oid = (String)i.next();
Vector critRow = new Vector();
String extname = getNameFromOID(oid);
critRow.add(new JLabel(extname, CertViewer.criticalExtensionIcon, SwingConstants.LEFT));
addExtDetails(critRow,
printext(extname, cert.getExtensionValue(oid)).toString());
data.add(critRow);
}
}
}
if (viewMode == 0 || viewMode == 4)
{
Vector thumbprintAlgorithmRow = new Vector();
thumbprintAlgorithmRow.add(new JLabel("Thumbprint Algorithm", CertViewer.thumbprintIcon, SwingConstants.LEFT));
thumbprintAlgorithmRow.add("sha1");
data.add(thumbprintAlgorithmRow);
try
{
Vector thumbprintRow = new Vector();
thumbprintRow.add(new JLabel("Thumbprint", CertViewer.thumbprintIcon, SwingConstants.LEFT));
MessageDigest md = MessageDigest.getInstance("SHA");
byte[] hash = md.digest(cert.getEncoded());
thumbprintRow.add(CBParse.bytes2HexSplit(hash, 4));
data.add(thumbprintRow);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
fireTableStructureChanged();
}
private void debugPrint()
{
System.out.println("get dn: " + cert.getSubjectDN());
System.out.println("get dn name: " + cert.getSubjectDN().getName());
System.out.println("getName: " + cert.getSubjectX500Principal().getName());
System.out.println("rfc2253: " + cert.getSubjectX500Principal().getName("RFC2253"));
System.out.println("canonical: " +cert.getSubjectX500Principal().getName("CANONICAL"));
System.out.println("toString: " + cert.getSubjectX500Principal().toString());
System.out.print("der: ");
byte[] bytes = cert.getSubjectX500Principal().getEncoded();
for (int i=0; i<bytes.length; i++)
System.out.print(" " + bytes[i]);
String name = cert.getSubjectX500Principal().getName();
System.out.println();
System.out.println("default: ");
bytes = name.getBytes();
System.out.println("straight name: " + CBParse.bytes2Hex(bytes));
try
{
System.out.println("unicode: " + CBParse.bytes2Hex(name.getBytes("UTF-16")));
System.out.println("utf-8: " + CBParse.bytes2Hex(name.getBytes("UTF-8")));
}
catch (UnsupportedEncodingException e2)
{
e2.printStackTrace();
}
System.out.println();
}
private void addExtDetails(Vector row, String extDetails)
{
StringTokenizer tok = new StringTokenizer(extDetails, "\n");
if (tok.countTokens() > 1)
{
String brief = tok.nextToken();
row.addElement(brief);
briefDetails.put(brief, extDetails);
}
else
{
row.addElement(extDetails);
}
}
private String getNameFromOID(String oid)
{
return ASN1OID.getName(oid);
}
private Object printext(String extname, byte[] extvalue)
{
try
{
DERCoder derCoder = new DERCoder();
ASN1Object ext = derCoder.decode(extvalue);
ASN1Object rext = null;
if (ext.isASN1Type(ASN1Type.OCTET_STRING))
rext = derCoder.decode((byte[])ext.getValue());
V3Extension v3e = null;
boolean done = false;
if (extname.equals("Authority Information Access"))
{
v3e = new AuthorityInfoAccess();
done = true;
}
else if (extname.equals("Subject Key Identifier"))
{
v3e = new SubjectKeyIdentifier();
done = true;
}
else if (extname.equals("Key Usage"))
{
v3e = new KeyUsage();
done = true;
}
else if (extname.equals("Subject Alternative Name"))
{
v3e = new SubjectAltName();
done = true;
}
else if (extname.equals("Issuer Alternative Name"))
{
v3e = new IssuerAltName();
done = true;
}
else if (extname.equals("Basic Constraints"))
{
v3e = new BasicConstraints();
done = true;
}
else if (extname.equals("Name Constraints"))
{
v3e = new NameConstraints();
}
else if (extname.equals("Certificate Policies"))
{
v3e = new CertificatePolicies();
done = true;
}
else if (extname.equals("Policy Mappings"))
{
v3e = new PolicyMappings();
}
else if (extname.equals("Authority Key Identifier"))
{
v3e = new AuthorityKeyIdentifier();
done = true;
}
else if (extname.equals("Policy Constraints"))
{
v3e = new PolicyConstraints();
}
else if (extname.equals("Extended Key Usage"))
{
v3e = new ExtendedKeyUsage();
done = true;
}
else if (extname.equals("CRL Distribution Points"))
{
v3e = new CRLDistributionPoints();
done = true;
}
else if (extname.equals("Private Key Usage Period"))
{
v3e = new PrivateKeyUsagePeriod();
done = true;
}
else if (extname.equals("Netscape Cert Type"))
{
v3e = new NetscapeCertType();
done = true;
}
else
{
// v3e = new UnknownExtension(new ObjectID(oid, extname));
}
if (!done)
{
System.out.println("extname: " + extname);
System.out.println("exttype: " + rext);
System.out.println("extvalu: " + rext.getValue());
System.out.println("extbyte: " + CBParse.bytes2HexSplit((byte[])ext.getValue(), 4, 36));
}
if (v3e != null)
{
v3e.init(rext);
if (v3e.toString() == null)
throw new Exception("Could not read extension: " + extname);
return v3e;
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return CBParse.bytes2HexSplit(extvalue, 4, 36);
}
public int getRowCount()
{
return data.size();
}
public int getColumnCount()
{
return 2;
}
public String getColumnName(int col)
{
return headers[col];
}
public Object getValueAt(int row, int col)
{
return ((Vector)data.elementAt(row)).elementAt(col);
}
public Class getColumnClass(int col)
{
return getValueAt(0, col).getClass();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -