Criei um programa que adiciona certificados ao Firefox, para possibilitar fazer comunicacao via websocket com sites HTTPS. Sem o certificado, os browsers nao reconhecem o site porque nao podem enviar uma requisicao de uma conexao encriptada para uma nao encriptada.Para fazer isso, gero dois certificados:- um deles e o root, auto-assinado;- o segundo e de fato usado na conexao, e assinado pelo primeiro.No caso de Chrome e IE, o certificado e adicionado na Store do Windows. Nela, adiciona-se o certificado CA na Root Store e o SSL na My. No caso do Firefox, tem uma Store propria. Para adicionar o certificado, eu estava usando isso:certutil.exe -d [cert8.db path] -A -t "TCu,Cuw,Tuw" -n [name] -i [crt path]-d: diretorio do firefox-A: comando de adicionarUm dia fui rodar e descobri que nao funcionava mais no Firefox. Na hora de adicionar, nao reportava erro. Usando a opcao -L, o certificado era listado como adicionado. Mesmo olhando em Tools > Options > Advanced > Certificates (meu Firefox esta em ingles), estava la. Mas o Firefox continuava dizendo que o site nao era confiavel. Procurei um pouco, perdido. Fui olhar a VM de Linux, la ainda funcionava, com o mesmo codigo. Um tempo depois, olhei a versao do Firefox. A ultima atualizacao era recente, 13 de junho, versao 54. Falava em mudancas de seguranca, mas dizia que era CSS. Corri um pouco mais atras do meu rabo. Fui no Linux. A versao era anterior. Atualizei. Parou de funcionar tambem!Quase desisti nesse momento. Ate que alguem visse isso, em algo tao recente, ate que incomodasse gente suficiente...Comecei a testar fazer outras coisas. Mudei a permissao usada ("TCu,Cuw,Tuw"). Reli o erro, que falava de Issuer. Adicionei o certificado Root no Firefox tambem. No meio do caminho descobri uma coisa util: o certutil tem uma opcao -V, que valida parcialmente o certificado. Adicionando CA ainda nao funcionava. Tentei com alguns tipos de permissao, erros diferentes aconteciam. Quase desistindo de novo.Fui ate o Firefox e tentei adicionar o certificado na mao. Deu uma mensagem de erro, ao contrario do que o certutil fazia - que simplesmente adicionava. Sobre o parcialmente: o mesmo certificado que deu como valido no -V apontou invalido no Firefox direto. Procurei a mensagem no Google. Descobri que precisava de uma flag no certificado CA, em extensions, uma basic extension com valor CA=true.Resumo da opera:Adicionar certificado CA:certutil.exe -d [cert8.db path] -A -t "TC,," -n [name] -i [crt path]Adicionar certificado SSL:certutil.exe -d [cert8.db path] -A -t "u,," -n [name] -i [crt path]Em C#, usando BouncyCastle, para adicionar o CA=true:var generator = new X509V3CertificateGenerator();(...)var basicContraint = new BasicConstraints(true);generator.AddExtension( X509Extensions.BasicConstraints, true, basicContraint);Voila! Funcionou de novo. E pude ir feliz pra casa na segunda. Ao contrario de sexta, quando descobri o final do dia que tinha feito uma co Criei uma classe e um HTML para fazer um CheckBoxList no MVC. Coloquei na minha biblioteca, a Ak, que esta no bitbucket. A classe:using System;using System.Collections.Generic;using System.Linq;namespace Ak.MVC.Forms{ /// <summary> /// To create a CheckBoxList in Form /// </summary> public class CheckBoxList { /// <summary> /// Items of CheckBoxList /// </summary> public IEnumerable<CheckBoxItem> Items