Если использование javascript не является для вас проблемой, вы можете сделать следующее:
<asp:Repeater ID="DepartmentsRepeater" runat="server">
<ItemTemplate>
<input class="departments" onclick="show(this)" type="checkbox" value="<%# Container.DataItem?.ToString() %>" /><%# Container.DataItem?.ToString() %> </br>
<asp:Repeater ID="AreasRepeater" runat="server" DataSource='<%# GetAreasOfDepartment(Container.DataItem?.ToString()) %>'>
<ItemTemplate>
<div class="areas <%#((RepeaterItem)Container.Parent.Parent).DataItem?.ToString() %>">
<input type="checkbox" value="<%# Container.DataItem?.ToString() %>" /><%# Container.DataItem?.ToString() %> </br>
</div>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
</asp:Repeater>
<script>
$(".areas").hide();
function show(e) {
$(".areas").hide();
$(".departments").each(function (d) {
if (this.checked) {
var c = "." + this.value;
$(c).show();
}
})
}
</script>
public partial class _Default : Page
{
public List<string> Departments = new List<string> { "HR", "Finance" };
public Dictionary<string, List<string>> Areas = new Dictionary<string, List<string>>
{
{"HR", new List<string>{"HR1","HR2"} },
{"Finance", new List<string>{ "Finance1", "Finance2" } }
};
protected void Page_Load(object sender, EventArgs e)
{
this.DepartmentsRepeater.DataSource = Departments;
this.DepartmentsRepeater.DataBind();
}
public List<string> GetAreasOfDepartment(string dep)
{
return Areas[dep];
}
}
Как указывалось ранее, этот код предназначен только для демонстрации и не оптимизирован для производственного использования < 3
Это довольно просто, с помощью jdk6, по крайней мере...
bash$ keytool -keystore foo.jks -genkeypair -alias foo \ -dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU' Enter keystore password: Re-enter new password: Enter key password for (RETURN if same as keystore password): bash$ keytool -keystore foo.jks -exportcert -alias foo | \ openssl x509 -inform der -text Enter keystore password: asdasd Certificate: Data: Version: 3 (0x2) Serial Number: 1237334757 (0x49c03ae5) Signature Algorithm: dsaWithSHA1 Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com Validity Not Before: Mar 18 00:05:57 2009 GMT Not After : Jun 16 00:05:57 2009 GMT Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com Subject Public Key Info: Public Key Algorithm: dsaEncryption DSA Public Key: pub: 00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14: 7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7: bash$ keytool -importkeystore -srckeystore foo.jks \ -destkeystore foo.p12 \ -srcstoretype jks \ -deststoretype pkcs12 Enter destination keystore password: Re-enter new password: Enter source keystore password: Entry for alias foo successfully imported. Import command completed: 1 entries successfully imported, 0 entries failed or cancelled bash$ openssl pkcs12 -in foo.p12 -out foo.pem Enter Import Password: MAC verified OK Enter PEM pass phrase: Verifying - Enter PEM pass phrase: bash$ openssl x509 -text -in foo.pem Certificate: Data: Version: 3 (0x2) Serial Number: 1237334757 (0x49c03ae5) Signature Algorithm: dsaWithSHA1 Issuer: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com Validity Not Before: Mar 18 00:05:57 2009 GMT Not After : Jun 16 00:05:57 2009 GMT Subject: C=AU, ST=Victoria, L=Melbourne, CN=foo.example.com Subject Public Key Info: Public Key Algorithm: dsaEncryption DSA Public Key: pub: 00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14: 7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7: bash$ openssl dsa -text -in foo.pem read DSA key Enter PEM pass phrase: Private-Key: (1024 bit) priv: 00:8f:b1:af:55:63:92:7c:d2:0f:e6:f3:a2:f5:ff: 1a:7a:fe:8c:39:dd pub: 00:e2:66:5c:e0:2e:da:e0:6b:a6:aa:97:64:59:14: 7e:a6:2e:5a:45:f9:2f:b5:2d:f4:34:27:e6:53:c7:
Вы заканчиваете с:
(Этот последний файл может быть разделен на ключи и сертификаты, если Вам нравится.)
<час>сводка Команды - для создания JKS keystore:
keytool -keystore foo.jks -genkeypair -alias foo \
-dname 'CN=foo.example.com,L=Melbourne,ST=Victoria,C=AU'
сводка Команды - для преобразования JKS keystore в PKCS#12 keystore, затем в файл PEM:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
, если у Вас есть больше чем один сертификат в Вашем JKS keystore, и Вы хотите только экспортировать сертификат и ключ, связанный с одним из псевдонимов, можно использовать следующее изменение:
keytool -importkeystore -srckeystore foo.jks \
-destkeystore foo.p12 \
-srcalias foo \
-srcstoretype jks \
-deststoretype pkcs12
openssl pkcs12 -in foo.p12 -out foo.pem
сводка Команды - для сравнения JKS keystore с файлом PEM:
keytool -keystore foo.jks -exportcert -alias foo | \
openssl x509 -inform der -text
openssl x509 -text -in foo.pem
openssl dsa -text -in foo.pem
Эти keytool
команда не позволит Вам экспортировать закрытый ключ из базы ключей. Необходимо написать некоторый код Java, чтобы сделать это. Откройте базу ключей, получите ключ, в котором Вы нуждаетесь и сохраняете ее в файл в формате № 8 PKCS. Сохраните связанный сертификат также.
KeyStore ks = KeyStore.getInstance("jks");
/* Load the key store. */
...
char[] password = ...;
/* Save the private key. */
FileOutputStream kos = new FileOutputStream("tmpkey.der");
Key pvt = ks.getKey("your_alias", password);
kos.write(pvt.getEncoded());
kos.flush();
kos.close();
/* Save the certificate. */
FileOutputStream cos = new FileOutputStream("tmpcert.der");
Certificate pub = ks.getCertificate("your_alias");
cos.write(pub.getEncoded());
cos.flush();
cos.close();
утилиты Use OpenSSL для преобразования этих файлов (которые находятся в двоичном формате) к формату PEM.
openssl pkcs8 -inform der -nocrypt < tmpkey.der > tmpkey.pem
openssl x509 -inform der < tmpcert.der > tmpcert.pem
Ну, OpenSSL должен сделать это ловко из файла № 12:
openssl pkcs12 -in pkcs-12-certificate-file -out pem-certificate-file
openssl pkcs12 -in pkcs-12-certificate-and-key-file -out pem-certificate-and-key-file
, Возможно, больше деталей о том, какова ошибка/отказ?