En visual net tengo problemas para generar mi sello
Publicado: Mié Jul 04, 2012 11:26 am
hola buen dia,,, ojala me puedas decir o llevar o sacarme de la duda cual es mi error, estoy checando varios codigos, pero no se si lo estoy haciendo de la manera correcta, bueno sigo con la pregunta,
genero mis archivos y demas los pruebo con el VALIDA CFD y el unico error que me manda es sello invalido lo demas me dice que esta bien
en fin pongo el codigo para que si alguien sigue atorado en este tema pueda apoyarse y demas
es algo largho pero me a servido, lo unico que no se es en que me equivoco
'CREAMOS EL SHA1 (asi le puse yo jeje)
Dim process As New Process
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process.StartInfo.Arguments = "dgst -sha1 C:\Facturacion\cadena.txt" 'le madamos solo un parametro. (el nombre del archivo .txt q contiene la cadena original)
process.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process.Start() 'iniciamos el proceso
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dim codificado As String 'creamos una varaible q almacenara el resultado encriptado
codificado = process.StandardOutput.ReadToEnd 'el resultado del parametro "dgst -SHA1 d:\cadena.txt" se almacena en esta variable
process.WaitForExit() 'le decimos q se espere el proceso
'ahora, al resultado lo pasamos en un ciclo for para quitarle la
'parte del sha1 y q solo nos quede el resultado
Dim codificado2 As String = ""
For i = 0 To codificado.Length - 1
If codificado.Chars(i) = "=" Then
codificado2 = Mid(codificado, i + 3) 'seleccionamos desde la psicion en la q se quedo hasta al final de la cadena y eso se lo pasamos a codigificado2
End If
Next
System.IO.File.WriteAllText("C:\Facturacion\codificado.txt", UCase(codificado2)) 'escribimos el resultado en otro archivo de texto
'CREAMOS EL ARCHIVO .KEY.PEM
Dim process2 As New Process
process2.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process2.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process2.StartInfo.Arguments = "pkcs8 -inform DER -in C:\Facturacion\CMO900226824_1012281011S.key -out C:\Facturacion\CMO900226824_1012281011S.key.pem -passin pass:paswoord" 'le madamos solo un parametro para que me de el resultado
process2.StartInfo.WorkingDirectory = Application.StartupPath 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process2.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process2.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process2.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process2.Start() 'iniciamos el proceso
process2.WaitForExit() 'le decimos q se espere el proceso
'CREAMOS EL SELLO
Dim process3 As New Process
process3.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process3.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
--->>>> process3.StartInfo.Arguments = "dgst -sha1 -sign C:\Facturacion\CMO900226824_1012281011S.key.pem C:\Facturacion\codificado.txt " 'le madamos solo un parametro.
process3.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process3.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process3.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process3.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process3.Start() 'iniciamos el proceso
Dim SelloTxt As String 'creamos una varaible q almacenara el resultado encriptado
SelloTxt = process3.StandardOutput.ReadToEnd
Dim b64 As String = Convert.ToBase64String(Encoding.Default.GetBytes(SelloTxt)) 'decodificamos el resultado en base 64
process3.WaitForExit() 'le decimos q se espere el proceso
System.IO.File.WriteAllText("C:\Facturacion\sello.txt", b64) 'escribimos el resultado en otro archivo de texto
'CREAMOS EL CERTIFICADO .PEM (nombre.CER.PEM) O EL NOMBNRE QUE LE QUERAMOS PONER
Dim process4 As New Process
process4.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
process4.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process4.StartInfo.Arguments = " x509 -inform DER -in C:\Facturacion\CMO900226824_1012281011S.cer -outform PEM -out C:\Facturacion\CMO900226824_1012281011S.cer.pem " 'le madamos solo un parametro.
process4.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process4.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process4.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process4.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process4.Start() 'iniciamos el proceso
process4.WaitForExit() 'le decimos q se espere el proceso
'EXTRAEMOS LA CADENA DEL CERTIFICADO MIIE/TCCA+WgAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDAwDQYJKoZ Ih ......
Dim process5 As New Process
process5.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process5.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process5.StartInfo.Arguments = "x509 -inform DER -outform PEM -in C:\Facturacion\CMO900226824_1012281011S.cer" 'le madamos solo un parametro.
process5.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process5.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process5.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process5.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process5.Start() 'iniciamos el proceso
process5.WaitForExit() 'le decimos q se espere el proceso
'hasta aqui son los datos "complicados"
Dim CertificadoCadena As String 'creamos una varaible q almacenara el resultado encriptado
CertificadoCadena = process5.StandardOutput.ReadToEnd
CertificadoCadena = Mid(CertificadoCadena, 28)
'quitamos los guiones
Dim RespCertificadoCadena As String = ""
For i = 0 To CertificadoCadena.Length - 1
If CertificadoCadena.Chars(i) <> "-" Then
RespCertificadoCadena = RespCertificadoCadena & CertificadoCadena.Chars(i)
RespCertificadoCadena = Replace(RespCertificadoCadena, vbLf, "")
Else
Exit For
End If
Next
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'OBTENEMOS EL NUMERO DE NO. DE CERTIFICADO
Dim process6 As New Process
process6.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process6.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process6.StartInfo.Arguments = " x509 -in D:\facturacion\CMO900226824_1012281011S.cer.pem -serial " 'le madamos solo un parametro.
process6.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process6.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process6.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process6.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process6.Start() 'iniciamos el proceso
process6.WaitForExit() 'le decimos q se espere el proceso
Dim NoCertificado As String 'creamos una varaible q almacenara el resultado NoCertificado (el string completo)
NoCertificado = Mid(process6.StandardOutput.ReadToEnd, 8)
Dim NoCertificadoR As String = ""
'le aplicamos el ciclo estraemos solo las pociciones pares esto paras que nos deja la cadena original nadamas
For i = 0 To NoCertificado.Length - 1
If NoCertificado(i) <> "-" Then
If ((i + 1) Mod 2) = 0 Then
NoCertificadoR = NoCertificadoR & NoCertificado(i)
End If
Else
Exit For
End If
Next
bueno hasta aca los preocesos que hago para sacar los datos y formar mi xml de ahi pues ya saco de la bd lo que me falta para formarlo bueno ya con esto donde tengo el error es en sello es lo que me marca error no se si le estoy enviando bien mi linea de comandos
bueno a espera de tu ayuda gracias de antemano+
y coomo dicen mas vale un codigo que haga superar a este mundo que 10000 lineas ocualtas baja la avaricia y el poder
genero mis archivos y demas los pruebo con el VALIDA CFD y el unico error que me manda es sello invalido lo demas me dice que esta bien
en fin pongo el codigo para que si alguien sigue atorado en este tema pueda apoyarse y demas
es algo largho pero me a servido, lo unico que no se es en que me equivoco
'CREAMOS EL SHA1 (asi le puse yo jeje)
Dim process As New Process
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process.StartInfo.Arguments = "dgst -sha1 C:\Facturacion\cadena.txt" 'le madamos solo un parametro. (el nombre del archivo .txt q contiene la cadena original)
process.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process.Start() 'iniciamos el proceso
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dim codificado As String 'creamos una varaible q almacenara el resultado encriptado
codificado = process.StandardOutput.ReadToEnd 'el resultado del parametro "dgst -SHA1 d:\cadena.txt" se almacena en esta variable
process.WaitForExit() 'le decimos q se espere el proceso
'ahora, al resultado lo pasamos en un ciclo for para quitarle la
'parte del sha1 y q solo nos quede el resultado
Dim codificado2 As String = ""
For i = 0 To codificado.Length - 1
If codificado.Chars(i) = "=" Then
codificado2 = Mid(codificado, i + 3) 'seleccionamos desde la psicion en la q se quedo hasta al final de la cadena y eso se lo pasamos a codigificado2
End If
Next
System.IO.File.WriteAllText("C:\Facturacion\codificado.txt", UCase(codificado2)) 'escribimos el resultado en otro archivo de texto
'CREAMOS EL ARCHIVO .KEY.PEM
Dim process2 As New Process
process2.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process2.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process2.StartInfo.Arguments = "pkcs8 -inform DER -in C:\Facturacion\CMO900226824_1012281011S.key -out C:\Facturacion\CMO900226824_1012281011S.key.pem -passin pass:paswoord" 'le madamos solo un parametro para que me de el resultado
process2.StartInfo.WorkingDirectory = Application.StartupPath 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process2.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process2.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process2.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process2.Start() 'iniciamos el proceso
process2.WaitForExit() 'le decimos q se espere el proceso
'CREAMOS EL SELLO
Dim process3 As New Process
process3.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process3.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
--->>>> process3.StartInfo.Arguments = "dgst -sha1 -sign C:\Facturacion\CMO900226824_1012281011S.key.pem C:\Facturacion\codificado.txt " 'le madamos solo un parametro.
process3.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process3.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process3.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process3.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process3.Start() 'iniciamos el proceso
Dim SelloTxt As String 'creamos una varaible q almacenara el resultado encriptado
SelloTxt = process3.StandardOutput.ReadToEnd
Dim b64 As String = Convert.ToBase64String(Encoding.Default.GetBytes(SelloTxt)) 'decodificamos el resultado en base 64
process3.WaitForExit() 'le decimos q se espere el proceso
System.IO.File.WriteAllText("C:\Facturacion\sello.txt", b64) 'escribimos el resultado en otro archivo de texto
'CREAMOS EL CERTIFICADO .PEM (nombre.CER.PEM) O EL NOMBNRE QUE LE QUERAMOS PONER
Dim process4 As New Process
process4.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
process4.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process4.StartInfo.Arguments = " x509 -inform DER -in C:\Facturacion\CMO900226824_1012281011S.cer -outform PEM -out C:\Facturacion\CMO900226824_1012281011S.cer.pem " 'le madamos solo un parametro.
process4.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process4.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process4.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process4.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process4.Start() 'iniciamos el proceso
process4.WaitForExit() 'le decimos q se espere el proceso
'EXTRAEMOS LA CADENA DEL CERTIFICADO MIIE/TCCA+WgAwIBAgIUMzAwMDEwMDAwMDAxMDAwMDA4MDAwDQYJKoZ Ih ......
Dim process5 As New Process
process5.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process5.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process5.StartInfo.Arguments = "x509 -inform DER -outform PEM -in C:\Facturacion\CMO900226824_1012281011S.cer" 'le madamos solo un parametro.
process5.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process5.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process5.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process5.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process5.Start() 'iniciamos el proceso
process5.WaitForExit() 'le decimos q se espere el proceso
'hasta aqui son los datos "complicados"
Dim CertificadoCadena As String 'creamos una varaible q almacenara el resultado encriptado
CertificadoCadena = process5.StandardOutput.ReadToEnd
CertificadoCadena = Mid(CertificadoCadena, 28)
'quitamos los guiones
Dim RespCertificadoCadena As String = ""
For i = 0 To CertificadoCadena.Length - 1
If CertificadoCadena.Chars(i) <> "-" Then
RespCertificadoCadena = RespCertificadoCadena & CertificadoCadena.Chars(i)
RespCertificadoCadena = Replace(RespCertificadoCadena, vbLf, "")
Else
Exit For
End If
Next
'++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
'OBTENEMOS EL NUMERO DE NO. DE CERTIFICADO
Dim process6 As New Process
process6.StartInfo.WindowStyle = ProcessWindowStyle.Minimized
process6.StartInfo.FileName = "C:\OpenSSL\bin\openssl.exe" 'le ponemos el nombre del archivo q hara la encriptacion (la ruta del openssl.exe)
process6.StartInfo.Arguments = " x509 -in D:\facturacion\CMO900226824_1012281011S.cer.pem -serial " 'le madamos solo un parametro.
process6.StartInfo.WorkingDirectory = "C:\OpenSSL\bin" 'esto es para poner el direcctorio inicial en el q iniciara el proceso
process6.StartInfo.UseShellExecute = False 'esto es para decirle q no usaremos el shell del sistema operativo
process6.StartInfo.ErrorDialog = False 'esto es para omitir cualquier mensaje de error del proceso a ejecutar
process6.StartInfo.RedirectStandardOutput = True 'esto es para decirle q vamos a escribir (o utiliar) el resultado de la secuencia (o sea el resultado encriptado)
process6.Start() 'iniciamos el proceso
process6.WaitForExit() 'le decimos q se espere el proceso
Dim NoCertificado As String 'creamos una varaible q almacenara el resultado NoCertificado (el string completo)
NoCertificado = Mid(process6.StandardOutput.ReadToEnd, 8)
Dim NoCertificadoR As String = ""
'le aplicamos el ciclo estraemos solo las pociciones pares esto paras que nos deja la cadena original nadamas
For i = 0 To NoCertificado.Length - 1
If NoCertificado(i) <> "-" Then
If ((i + 1) Mod 2) = 0 Then
NoCertificadoR = NoCertificadoR & NoCertificado(i)
End If
Else
Exit For
End If
Next
bueno hasta aca los preocesos que hago para sacar los datos y formar mi xml de ahi pues ya saco de la bd lo que me falta para formarlo bueno ya con esto donde tengo el error es en sello es lo que me marca error no se si le estoy enviando bien mi linea de comandos
bueno a espera de tu ayuda gracias de antemano+
y coomo dicen mas vale un codigo que haga superar a este mundo que 10000 lineas ocualtas baja la avaricia y el poder