?? storesh.cs
字號(hào):
}
catch (Exception e)
{
Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
}
break;
case "i":
case "import":
try
{
String filename = null;
String password = null;
CAPICOM_KEY_STORAGE_FLAG iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_DEFAULT;
if (alArgs.Count >= 2)
{
filename = (String)alArgs[1];
}
if (alArgs.Count >= 3)
{
password = (String)alArgs[2];
}
if (alArgs.Count >= 4)
{
String flag = null;
if (alArgs.Count == 4)
{
password = null;
flag = (String)alArgs[3];
}
else if (alArgs.Count == 5)
{
flag = (String)alArgs[4];
}
if (flag.Equals ("e"))
{
iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_EXPORTABLE;
}
else if (flag.Equals ("p"))
{
iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_USER_PROTECTED;
}
else if (flag.Equals ("ep") || flag.Equals ("pe"))
{
iFlag = CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_USER_PROTECTED | CAPICOM_KEY_STORAGE_FLAG.CAPICOM_KEY_STORAGE_EXPORTABLE;
}
}
_oCurrStore.Load(filename, password, iFlag);
}
catch (Exception e)
{
Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
}
break;
case "p":
case "pfxexport":
try
{
oCert = GetCertByIndex(Convert.ToInt32(alArgs[1]));
if (oCert != null )
{
String filename = (String)alArgs[2];
String password = (String)alArgs[3];
if (filename != null)
{
oCert.Save(filename,
password,
CAPICOM_CERTIFICATE_SAVE_AS_TYPE.CAPICOM_CERTIFICATE_SAVE_AS_PFX,
CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN);
}
else
{
Console.WriteLine("No filename specified.");
}
}
else
{
Console.WriteLine ("No certificate with that index (" + alArgs[1] + ") could be found.");
}
}
catch (Exception e)
{
Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
}
break;
case "c":
case "create":
case "del":
try
{
// Opening it is the same whether we're creating or deleting
if (alArgs.Count == 1) {
Console.WriteLine ("Please enter a name for the store");
break;
}
String name = (String) alArgs[1];
for (int i = 2; i < alArgs.Count; i++) {
name += " " + alArgs[i];
}
Store newStore = new Store();
CAPICOM_STORE_LOCATION storeLoc = CAPICOM_STORE_LOCATION.CAPICOM_CURRENT_USER_STORE;
if (_currStoreLocation.Equals(LocalMachine)) {
storeLoc = CAPICOM_STORE_LOCATION.CAPICOM_LOCAL_MACHINE_STORE;
}
newStore.Open(storeLoc,
name,
CAPICOM_STORE_OPEN_MODE.CAPICOM_STORE_OPEN_READ_WRITE);
// Now delete if that is what was chosen
if (alArgs[0].Equals("del")) {
if (_currStoreName.Equals(name)) {
Console.WriteLine("You cannot delete the store you are currently viewing");
Console.WriteLine("Please use the <cd> command to change stores first");
break;
}
newStore.Delete();
}
}
catch (Exception e)
{
Console.WriteLine ("An error was encountered processing the " + alArgs[0] + " command: " + e.Message);
}
break;
case "d":
case "dir":
{
Certificates oCerts;
Listing listing = Listing.Brief;
if ((_currStoreLocation.Equals(CurrentUser) || _currStoreLocation.Equals(LocalMachine))
&& _currStoreName.Length == 0)
{
uint retval = 0;
uint dwFlags = CERT_SYSTEM_STORE_CURRENT_USER;
CertEnumSystemStoreCallback StoreCallback = new CertEnumSystemStoreCallback(Storesh.CertEnumSystemStoreCallback);
if (_currStoreLocation.Equals(LocalMachine))
{
dwFlags = CERT_SYSTEM_STORE_LOCAL_MACHINE;
}
retval= Win32.CertEnumSystemStore(
dwFlags,
0,
_currStoreName,
StoreCallback
);
}
else if (alArgs.Count >= 1)
{
int i =0 ;
try
{
_currFilter = _oCurrStore.Certificates.GetEnumerator();
for (i = 1; i < alArgs.Count; i++)
{
String param = ((String)alArgs[i]).ToLower();
if (param.Equals("/l") || param.Equals("-l"))
{
listing = Listing.Long;
}
else if (param.Equals("/subject") || param.Equals("-subject"))
{
Object filter = (System.String)alArgs[++i];
oCerts = (Certificates)_oCurrStore.Certificates;
oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_SUBJECT_NAME,
filter,
false);
_currFilter = oCerts.GetEnumerator();
}
else if (param.Equals("/eku") || param.Equals("-eku"))
{
Object filter = (System.String)alArgs[++i];
oCerts = (Certificates)_oCurrStore.Certificates;
oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_APPLICATION_POLICY,
filter,
false);
_currFilter = oCerts.GetEnumerator();
}
else if (param.Equals("/issuer") || param.Equals("-issuer"))
{
Object filter = (System.String)alArgs[++i];
oCerts = (Certificates)_oCurrStore.Certificates;
oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_ISSUER_NAME,
filter,
false);
_currFilter = oCerts.GetEnumerator();
}
else if (param.Equals("/sha1") || param.Equals("-sha1"))
{
String filter = (String)alArgs[++i];
oCerts = (Certificates)_oCurrStore.Certificates;
oCerts = (Certificates)oCerts.Find(CAPICOM_CERTIFICATE_FIND_TYPE.CAPICOM_CERTIFICATE_FIND_SHA1_HASH,
filter,
false);
_currFilter = oCerts.GetEnumerator();
}
}
i = 1;
while (_currFilter.MoveNext() == true)
{
oCert = (Certificate) _currFilter.Current;
Console.Write ( (i++ + ". ").PadRight(4,' '));
switch (listing)
{
case Listing.Brief:
Console.WriteLine( ToColumn (oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME), CERTNAME_LENGTH) +
" " +
ToColumn (oCert.ValidToDate.ToString(), VALIDITY_LENGTH) +
ToColumn (oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME), CERTNAME_LENGTH) );
break;
case Listing.Long:
{
Console.WriteLine( ToColumn (oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME), CERTNAME_LENGTH) +
" " +
ToColumn (oCert.Thumbprint, THUMBPRINT_LENGTH ));
Console.WriteLine ("Issuer: " + oCert.GetInfo(CAPICOM_CERT_INFO_TYPE.CAPICOM_CERT_INFO_ISSUER_SIMPLE_NAME));
Console.WriteLine ("Validity Period: " + oCert.ValidFromDate + " - " + oCert.ValidToDate);
DisplayEKU(oCert.ExtendedKeyUsage().EKUs);
Console.WriteLine();
break;
}
}
}
}
catch (Exception e)
{
Console.WriteLine("An error was encountered: " + e.Message);
}
}
break;
}
default:
DisplayHelp();
break;
}
return false;
}
public static bool CertEnumSystemStoreCallback(
String pvSystemStore,
uint dwFlags,
ref CERT_SYSTEM_STORE_INFO pStoreInfo,
uint pvReserved,
String pvArg
)
{
Console.WriteLine("[ " +pvSystemStore + " ]");
return true;
}
public static Certificate GetCertByIndex( int idx )
{
Certificate oCert;
int i = 0;
if (_oCurrStore != null)
{
if (_currFilter == null)
{
_currFilter = _oCurrStore.Certificates.GetEnumerator();
}
else
{
_currFilter.Reset();
}
while (_currFilter.MoveNext() == true)
{
oCert = (Certificate)_currFilter.Current;
i++;
if (i == idx)
{
return oCert;
}
}
}
return null;
}
private static ArrayList ParseArgs(String input)
{
char[] delims = new char[] {' '};
ArrayList argsarray = new ArrayList();
String multiString = null;
String[] argSplit = input.Split(delims);
for (int i = 0; i < argSplit.Length; i++)
{
String curr = argSplit[i];
if (curr.StartsWith("\"") && curr.EndsWith("\""))
{
argsarray.Add(curr.Substring(1,curr.Length-2));
}
else if (curr.StartsWith("\""))
{
multiString = curr;
}
else if (argSplit[i].EndsWith("\""))
{
multiString = multiString + " " + curr;
argsarray.Add(multiString.Substring(1,multiString.Length-2));
multiString = null;
}
else
{
if (multiString != null)
{
multiString = multiString + " " + curr;
}
else
{
argsarray.Add(curr);
}
}
}
argSplit = null;
return argsarray;
}
public static void DisplayHelp()
{
Console.WriteLine();
Console.Write("[h]elp".PadRight(HELP_PAD, ' '));
Console.WriteLine("This screen");
Console.WriteLine();
Console.Write("cd <location>".PadRight(HELP_PAD, ' '));
Console.WriteLine("<location> is a store name or ..");
Console.WriteLine("".PadRight(HELP_PAD, ' ')+ "Can also be \\LocalMachine (\\lm) or \\CurrentUser (\\cu)");
Console.WriteLine();
Console.Write("[d]ir <options>".PadRight(HELP_PAD, ' '));
Console.WriteLine("List the contents of a certificate store");
Console.WriteLine("".PadRight(HELP_PAD, ' ')+ "-l Long listing");
Console.WriteLine("".PadRight(HELP_PAD, ' ')+ "-subject <name> Match subject name.");
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -