Para una aplicación segura, necesito seleccionar un certificado en un cuadro de diálogo. ¿Cómo puedo acceder a la tienda de certificados o a una parte de ella (por ejemplo, storeLocation="Local Machine"
y storeName="My"
) usando C# y obtener una colección de todos los certificados desde allí? Gracias de antemano por tu ayuda.Obtener una lista de certificados del almacén de certificados en C#
Respuesta
Sí, la propiedad X509Store.Certificates
devuelve una instantánea del almacén de certificados X.509.
X509Store store = new X509Store("My");
store.Open(OpenFlags.ReadOnly);
foreach (X509Certificate2 mCert in store.Certificates){
//TODO's
}
Prueba esto:
//using System.Security.Cryptography.X509Certificates;
public static X509Certificate2 selectCert(StoreName store, StoreLocation location, string windowTitle, string windowMsg)
{
X509Certificate2 certSelected = null;
X509Store x509Store = new X509Store(store, location);
x509Store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection col = x509Store.Certificates;
X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(col, windowTitle, windowMsg, X509SelectionFlag.SingleSelection);
if (sel.Count > 0)
{
X509Certificate2Enumerator en = sel.GetEnumerator();
en.MoveNext();
certSelected = en.Current;
}
x509Store.Close();
return certSelected;
}
Linq lo hace más fácil: x509Store.Certificates.OfType
@JonathanDeMarks: ¿qué significa exactamente el '" DC = mysite, DC = com "' aquí? Ninguno de estos ejemplos parece mostrar cómo obtener un certificado _specific_ ... – Nyerguds
@Nyerguds La pregunta es: Obtenga una lista de certificados del almacén de certificados en C#, no específicos. Por favor, crea otra pregunta. – Cobaia
La forma más sencilla de hacerlo es mediante la apertura del almacén de certificados que desea y luego usando X509Certificate2UI
.
var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
store.Open(OpenFlags.ReadOnly);
var selectedCertificate = X509Certificate2UI.SelectFromCollection(
store.Certificates,
"Title",
"MSG",
X509SelectionFlag.SingleSelection);
Más información en X509Certificate2UI
on MSDN.
Para usar 'X509Certificate2UI' Necesito agregar una referencia a' System.security.dll', sin embargo esto funciona como un charm +1 ':)'. También para usar un keystore de usuario utilizo 'StoreLocation.CurrentUser' en lugar de'StoreLocation.LocalMachine'. – albciff
- 1. Certificados: ¿cuándo se instalan en el almacén de certificados?
- 2. Instalar certificados en el almacén de certificados de usuario local de Windows en C#
- 3. Obtener certificados en llavero
- 4. no certificado de cliente en el almacén de certificados
- 5. Certificados de SmartCard en C#
- 6. Tienda de certificados de Windows
- 7. ¿Cómo puedo obtener una lista de certificados raíz de confianza en Java?
- 8. Certificados de cliente encadenados
- 9. equivalente de Linux para el almacén de certificados de Windows
- 10. Permisos de ASP.net para el almacén de certificados raíz
- 11. Android: Lista de certificados raíz confiables disponibles
- 12. rsacryptoserviceprovider usando certificados x509 C#
- 13. ¿Cómo leer certificados de mi tienda de certificados?
- 14. ¿Puede OpenSSL en Windows usar el almacén de certificados del sistema?
- 15. cadena de certificados no encontrada
- 16. Instalación de certificados Advertencia de seguridad ¿Alternativa?
- 17. Aceptar certificados en Java
- 18. Autenticación de cliente WSDL y múltiples certificados
- 19. Autenticación SSL con certificados: ¿deberían los certificados tener un nombre de host?
- 20. Mercurial 1.7.3 error de certificados de Windows
- 21. ¿Qué certificados son confiables en Truststore?
- 22. Importación en particular, almacén de certificados desde la línea de comandos
- 23. Mix certificados SSL
- 24. Listado de todos los certificados instalados en android
- 25. ¿Adjuntar certificados de cliente con Axis2?
- 26. WCF, Seguridad y Certificados
- 27. SSL/TLS sin certificados
- 28. iPhone TrustStore CA certificados
- 29. Certificados SSL - diferencias
- 30. autofirmado VisualSVN servidor de certificados
Para eliminar la posibilidad de errores tipográficos, debe usar las enumeraciones: StoreName y StoreLocation. –