package at.chille.crawler.analysis;
import java.security.Principal;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import at.chille.crawler.database.model.HostInfo;
public class AnalysisCertIssuers extends Analysis
{
public AnalysisCertIssuers()
{
super();
}
public AnalysisCertIssuers(boolean showDetails)
{
super(showDetails);
}
public AnalysisCertIssuers(long useCrawlingSessionID, boolean showDetails)
{
super(useCrawlingSessionID, showDetails);
}
@Override
public void init()
{
this.name = "CertIssuers";
this.description = "Which Root Certificates are used?";
}
protected Map<Principal, List<HostInfo>> issuers = new HashMap<Principal, List<HostInfo>>();
@Override
public int analyze()
{
// CrawlingSession cs = this.selectCrawlingSession();
Collection<HostInfo> hostInfos = this.getHostsToAnalyze();
issuers.clear();
// out.println(cs.getTimeStarted() + " - " + cs.getDescription());
for (HostInfo hi : hostInfos)
{
List<X509Certificate> certs = CertificateSorter
.sortCertificates(CertificateSorter.parseCertificates(hi.getCert()));
if (certs.size() > 0)
{
X509Certificate root = certs.get(certs.size() - 1);
Principal issuer = root.getIssuerDN();
if (!issuers.containsKey(issuer))
{
issuers.put(issuer, new ArrayList<HostInfo>());
}
issuers.get(issuer).add(hi);
}
}
for (Map.Entry<Principal, List<HostInfo>> issuer : issuers.entrySet())
{
out.println(issuer.getKey() + " (" + issuer.getValue().size() + ")");
if (this.showDetails)
{
for (HostInfo hi : issuer.getValue())
{
out.println(" " + hi.getHostName() + " -> " + hi.getSslProtocol() + ", "
+ hi.getCipherSuite());
}
}
}
return 0;
}
}