Error al realizar conexiones SSL, TLS y HTTPS en Mono


Mono, la implementación libre de .NET Framwork, no permite por defecto realizar conexiones que requieran el uso de SSL o TLS. Esto impide, por ejemplo, comunicarse con direcciones https vía código; lanzando una excepción como esta:

Security.Protocol.Tls.TlsException: Invalid certificate received form server.

Este comportamiento no es un bug, es un sistema de seguridad.

Las conexiones seguras, para que realmente lo sean para los usuarios, necesitan que el cliente pueda verificar la legitimidad del servidor remoto. Para ello existen entidades que expiden certificados para asegurar que el interlocutores quien dice ser.

Mensaje de Firefox indicando una conexion segura

Los navegadores web suelen incluir los certificados de varias entidades de confianza. Sin embargo, Mono no lo hace. Prefiere que cada usuario decida en quien quiere confiar.

Para resolver este problema existen dos soluciones sencillas y seguras:

Importar los certificados de Firefox

Este método tiene la ventaja de instalar los certificados de todas las entidades de confianza mas habituales sin tener que buscar la concreta necesaria:

mozroots --import --ask-remove

Importar un certificado concreto

Si no tenemos Firefox, el que necesitamos no viene incluido o solo queremos uno concreto; existe la posibilidad de importar un fichero de certificado:

Como ejemplo, vamos a instalar un certificado de GoDaddy.

  1. Descargamos el archivo gd-class2-root.crt desde https://certs.godaddy.com/anonymous/repository.seam a una carpeta de nuestro ordenador (p. ej.: /home/usuario)
  2. Ejecutamos el siguiente comando en nuestra terminal
certmgr -add -c Trust /home/usuario/gd-class2-root.crt

Una vez completado alguno de los dos métodos podremos escribir código en Mono que se comunique vía SSL o TLS.

Para mas información, se puede consultar http://www.mono-project.com/FAQ:_Security

Anuncios

Buscaminas en C#


Buscaminas (Minesweeper en inglés) es un juego para un jugador cuyo objetivo es descubrir toda una cuadrícula sin destapar las minas. El mapa proporciona información sobre que casillas no se deben destapar mediante números que indican la cantidad de bombas cercanas. Este videojuego es muy conocido ya que viene incluido en todas las versiones del sistema operativo Windows desde su versión 3.0 (1990)

Recientemente he desarrollado una version de este juego en c# y he decido ponerla a disposición de todos los lectores de Informatica En Red. Este clon del buscaminas no está diseñado para ser ni muy eficiente, ni muy bonito, pero cumple su cometido a la perfección: entretener.

Buscaminas

Para aquellos con conocimientos de programación que estén interesados en su funcionamiento, el código fuente está disponible libremente

Descargar juego (.zip, 8 kB)

Descargar código fuente (.zip, 20 kB)

Descargar ayuda local en Visual Studio 2010


Hace relativamente poco (5 meses…) salió la nueva versión 2010 del tan conocido y necesitado IDE Microsoft Visual Studio. Esta nueva actualización de su entorno de desarrollo ha traído también la versión 4 de .NET el framework de Microsoft.

La integración de las aplicaciones en Windows 7 ha sido mejorada junto a su interfaz, pero algo que sin lugar a dudas muchos programadores echaran en falta, sobre todo los iniciados, es su nuevo forma de proporcionar la ayuda, on-line. Cuando utilizamos el famoso método de pulsar F1 nos encontramos con que nos redirige al MSDN, un método con el que se cuenta con la ventaja de tener siempre la ayuda más actualizada sin ocupar espacio en nuestro disco, sin embargo, puede que en momentos determinados no tengamos disponible una conexión a Internet y tengamos que dejar apartado nuestro proyecto, para ello podemos indicarle que descargue esta ayuda a nuestro ordenador y así la poderla consultar de forma local:

  1. Abre Visual Studio 2010, en cualquier edición, y pulsa en el menú de Ayuda -> Administrar opciones de ayuda como se ve en la imagen.
  2. Desde esta nueva ventana podremos hacer múltiples operaciones como son: Seleccionar entre visualizar ayuda online u offline, instalar la ayuda de forma online, actualizarla desde internet…. Elegiremos la opción de Instalar contenido desde Internet.
  3. A continuación aparecerán los diferentes contenidos que están disponibles para descargar e instalar, seleccionamos los que más necesitamos en función de nuestros programas y necesidades y los instalamos.
  4. En cualquier momento podemos actualizarlos, descargar o eliminar nuevas partes de esta fantástica ayuda que disponemos gratuita.

NOTA: Los contenidos de ayuda de NET Framework 4, Visual Studio C# y Ayuda en Ayuda, ocupan según los datos que tengo en estos momentos 1,4 GB, así que cada cual seleccione los que necesita y pueda guardar.

Visual Studio 2010: C# 4.0


Recientemente ha salido Visual Studio 2010, la última versión de la suite de programación de microsoft. Entre las novedades están las novedades están: un IDE mejorado con soporte para varios monitores, mejoras en el lenguaje C#, que alcanza su 4ª edición; y un nuevo lenguaje para .NET Framework: F#, que trataremos en un artículo próximo.

Una de las característica más comentadas de C# 4.0 son los “Parámetros Opcionales”, que ya estaban presentes en Visual Basic y que por fín llegan a C#.

En C# 3.0 y los anteriores si queríamos, por ejemplo, un método para sumar un distinto número de sumandos, era necesario sobrecargarlo como se muestra en el siguiente ejemplo:

int Sumar() { return Sumar(0, 0, 0, 0); }
int Sumar(int a) { return Sumar(a, 0, 0, 0); }
int Sumar(int a, int b) { return Sumar(a, b, 0, 0); }
int Sumar(int a, int b, int c) { return Sumar(a, b, c, 0); }
int Sumar(int a, int b, int c, int d) { return a + b + c + d; }

En C# 4 esto sería mucho más simple pues tan solo hace falta escribier un solo método con parámetros opcionales, a los que les indicamos sus valores predeterminados:

int Sumar(int a = 0, int b = 0, int c = 0, int d = 0) { return a + b + c + d; }

Si ahora quisiéramos utilizar esta función tendríamos varias posibilidades

int x = Util.Sumar();
int y = Util.Sumar(4, 3);
int z = Util.Sumar(b: 5, c: 7);

Como vemos, tenemos control total en los parámetros pudiendo omitir los que queramos de manera sencilla.

Ejemplos sacados de la web esasp.net

Compila en x86 con Visual C# Express Edition


La tecnología está avanzando de forma sorprendente junto a una reducción de precio. Antes ordenadores de 64 bits con sistemas operativos que lo aprovechasen eran escasos y se empleaban sobre todo en servidores. Con el lanzamiento de Windows Vista y sobre todo Windows 7 parece que la nueva gama de ordenadores portátiles viene con esta nueva arquitectura.

Una de las desventajas es que no todas las aplicaciones son compatibles aunque el sistema incorpore métodos de compatibilidad. Una aspecto importante es que desde ordenadores de 64 bit se pueden ejecutar ambas aplicaciones en 64 (x64) y en 32 (x86) bits teóricamente, pero desde uno de 32 bit no se puede ejecutar en 64 bit. Una vez entendido esto, se nos plantea la duda de que necesitamos compilar un proyecto para que un usuario con un arquitectura anterior lo pueda también ejecutar.

Para compilar en 32 bit (x86) desde Visual C# Express Edition siguiremos los siguiente pasos.

  1. Desde Archivo -> Abrir proyecto, abrimos el proyecto que deseamos compilar en esta arquitectura.
  2. Abrimos el Administrador de configuracion como muestra la imagen
  3. Hacemos click en <nueva…>
  4. En “Escriba o seleccione nueva plataforma”, seleccionamos x86, lo demás lo dejamos igual para lo que lo copie de Any CPU. Tendría que quedar como en las siguientes imágenes.

Sigue leyendo

Portabilidad, la gran ventaja de .NET Framework y Mono


.NET y MonoDesde los inicios de la informática, uno de los grandes problemas ha sido la interoperabilidad entre los sistemas operativos y las diferentes arquitecturas de hardware. Esto quiere decir que un programa diseñado para un sistema operativo y un procesador concretos no puede ser ejecutado en nigún otro.

Los programas, independientemente del lenguaje en el que han sido escritos, son compilados en código máquina (código binario), el único lenguaje que es capaz de interpretar el hardware y que es específico para cada tipo de procesador. Además, debido a la complejidad de los sistemas actuales, los programas no pueden comunicarse directamente con la máquina y deben hacerlo a través de las librerías que proporcionan los sistemas operativos. Tomando en cuenta estos dos factores el software resultante solo puede ser ejecutado en máquinas determinadas.

Entonces, ¿Como podríamos construir software que fuera útil en cualquier plataforma? Muy simple, utilizando un lenguaje intermedio común a todos los sistemas operativos que sea convertido a cada arquitectura cuando sea necesario.

.NET Framework y Mono, la versión opensource de .NET Framework, hacen precisamente eso: al compilar un programa que hayamos escrito, no lo hacemos en código máquina, sino en un lenguaje intermedio conocido como CIL (Common Intermediate Language). Este lenguaje universal, al no ser cercano a la máquina, es independiente de ella y se puede utilizar en cualquier ordenador.

Pero, ¿No hemos dicho que los ordenadores solo entienden el código máquina? .NET Framework y Mono son máquinas virtuales cuya función es “traducir” el programa al lenguaje que cada ordenador entiende conforme se va ejecutando. De esta forma, lo único que dependerá de cada plataforma será la máquina virtual pues los programas serán interpretados al vuelo (a esto se le llama compilación Just-In-Time).

Esquema del funcionamiento de un programa en .NET Framework

¿Que ventajas aporta el tener un lenguaje único?

Como dice el título, la Portabilidad. Si yo compilo un programa en CIL podré ejecutarlo en cualquier plataforma que tenga alguna de estas dos máquinas virtuales.

Actualmente existen versiones para cualquier sistema operativo: Windows, GNU/Linux, Mac OS  y para móviles con Windows Mobile o iPhone OS (este último gracias a la plataforma Mono)

Como ejemplo de programa portable tenemos TomBoy, la conocida aplicación de notas para Gnome en GNU/Linux, que al estar escrita en C# podemos instalar no solo en Linux, sino en Windows o Mac OS sin hacer modificaciones en el código fuente. Para utilizarla además necesitamos GTK#, una versión en CIL de las librerías gráficas de Gnome, y que por tanto nos permitiría ejecutar cualquier programa que las utilice en cualquier sistema operativo.


Enlaces: