Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
                }
            });
        }