public static SCI.Base.Resultado <X509Certificate2> recuperarCertificadoEnvio(string _guid, string _cnpj) { SCI.Corporativo.IRKO.Service _wrCorporativo = new SCI.Corporativo.IRKO.Service(); SCI.Corporativo.IRKO.ResultadoRecuperarCertificado _resultadoWr = _wrCorporativo.RecuperarCertificado(_guid, _cnpj); SCI.Base.Resultado <X509Certificate2> _resultado = new Base.Resultado <X509Certificate2>(); if (_resultadoWr.Sucesso) { SCI.Corporativo.IRKO.Certificado _certificado = _resultadoWr.RetornoRecuperarCertificado; X509Certificate2Collection _collection = new X509Certificate2Collection(); _collection.Import(_certificado.PfxFile, _certificado.PrivateKeyPassword, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); X509Certificate2 _cert = _collection.Cast <X509Certificate2>().FirstOrDefault(); /*System.IO.TextReader _textReader = new System.IO.StringReader(_certificado.PrivateKey); * PemReader _pemReader = new PemReader(_textReader); * AsymmetricCipherKeyPair _keyPair = (AsymmetricCipherKeyPair)_pemReader.ReadObject(); * * RSAParameters _rsa = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)_keyPair.Private); * RSACryptoServiceProvider _csp = new RSACryptoServiceProvider(); * _csp.ImportParameters(_rsa); * _cert.PrivateKey = _csp;*/ _resultado.Retorno = _cert; } else { _resultado.Sucesso = false; _resultado.Mensagens = new Base.ResultadoMensagem[] { new Base.ResultadoMensagem() { Texto = _resultadoWr.Mensagem } }; } return(_resultado); }
private void Certificado_SalvarClick(object sender, EventArgs e) { string _caminho = lblArquivo.Text; string _senha = txtSenha.Text; X509Certificate2Collection _collection = new X509Certificate2Collection(); _collection.Import(_caminho, _senha, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); _collection.Cast <X509Certificate2>().ToList().ForEach(_cert => { string _cnpj = string.Empty; _cert.Extensions.Cast <X509Extension>().ToList().ForEach(_ext => { if (_ext.Format(true).Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) .Cast <string>().Where(_line => _line.Trim().StartsWith("2.16.76.1.3.3")).Any()) { string _linha = _ext.Format(true).Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) .Cast <string>().Where(_line => _line.Trim().StartsWith("2.16.76.1.3.3")).FirstOrDefault(); string _valor = _linha.Substring(_linha.IndexOf('=') + 1); string[] _elementos = _valor.Split(' '); byte[] _bytes = new byte[14]; for (int j = 0; j < _bytes.Length; j++) { _bytes[j] = Convert.ToByte(_elementos[j + 2], 16); } _cnpj = Encoding.UTF8.GetString(_bytes); } }); if (string.IsNullOrEmpty(_cnpj)) { _cert.Extensions.Cast <X509Extension>().ToList().ForEach(_ext => { if (_ext.Format(true).Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) .Cast <string>().Where(_line => _line.Trim().StartsWith("2.16.76.1.3.1")).Any()) { string _linha = _ext.Format(true).Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries) .Cast <string>().Where(_line => _line.Trim().StartsWith("2.16.76.1.3.1")).FirstOrDefault(); string _valor = _linha.Substring(_linha.IndexOf('=') + 1); string[] _elementos = _valor.Split(' '); byte[] _bytes = new byte[11]; for (int j = 0; j < _bytes.Length; j++) { _bytes[j] = Convert.ToByte(_elementos[j + 10], 16); } _cnpj = Encoding.UTF8.GetString(_bytes); } }); } byte[] _subjectKey = null; _cert.Extensions.Cast <X509Extension>().ToList().ForEach(_ext => { if (_ext.Oid.Value.Equals("2.5.29.35")) { _subjectKey = _ext.RawData; } }); DateTime _vencimento = _cert.NotAfter; string _serial = _cert.GetSerialNumberString(); try { SCI.Corporativo.IRKO.Certificado _certificadoIRKO = new SCI.Corporativo.IRKO.Certificado(); _certificadoIRKO.CNPJCPF = _cnpj; _certificadoIRKO.Certificate = _cert.RawData; _certificadoIRKO.PrivateKeyPassword = _senha; System.Security.Cryptography.RSACryptoServiceProvider _privateKey = (System.Security.Cryptography.RSACryptoServiceProvider)_cert.PrivateKey; AsymmetricCipherKeyPair _keyPair = DotNetUtilities.GetRsaKeyPair(_privateKey); TextWriter _textWriter = new StringWriter(); PemWriter _pemWriter = new PemWriter(_textWriter); _pemWriter.WriteObject(_keyPair.Private); _textWriter.Flush(); _certificadoIRKO.PrivateKey = _textWriter.ToString(); _certificadoIRKO.PfxFile = _cert.Export(X509ContentType.Pkcs12, _senha); SCI.Corporativo.IRKO.Resultado _resultado = wrCorporativo.CadastrarCertificado(Guid, _certificadoIRKO); if (_resultado.Sucesso) { lblArquivo.Text = string.Empty; lblResumo.Text = string.Empty; lblSerial.Text = string.Empty; lblVencimento.Text = string.Empty; txtSenha.Text = string.Empty; MessageBox.Show("Certificado gravado com sucesso."); } else { MessageBox.Show(_resultado.Mensagem); } } catch (Exception _ex) { MessageBox.Show(_ex.Message); } }); }