Joias de assinatura

Dado o recente hack do rubygems.org, alguma preocupação foi levantada sobre a execução do código de joias baixadas na instalação.

A boa notícia é que o rubygems oferece algum nível de proteção ao cliente ao instalar os arquivos .gem, desde que o autor da gem tenha assinado a própria gem.

Para assinar uma joia:

$ gem cert –build replace.yourname@yourdomain.com

Isso produzirá dois arquivos: gem-public cert.pem e gem-private key.pem.
gem-private key.pem deve ser movido para um local seguro (este é um tópico em si, mas nem é preciso dizer, não compartilhe sua localização ou conteúdo com ninguém. Um stick USB ou algum outro dispositivo externo que pode ser desconectado pode ser um bom começo). O gem-public cert.pem será distribuído com cada gem que você assinar.

A última etapa será dizer ao .gemspec para usar estes arquivos:

gem.signing_key   = "/private/path/that/is/secure/gem-private_key.pem"
gem
.cert_chain = ["gem-public_cert.pem"]

Em seguida, construa a gema e implante normalmente. Ao instalar esta gema, o usuário agora pode fazer afirmações de que a assinatura deve ser válida e a gema é criada pelo próprio autor:

$ gem install option-1.0.1.gem -P HighSecurity

Antes que a linha acima seja executada com sucesso, no entanto, temos que confiar no certificado público, que você pode obter examinando o código-fonte do gem (não o .gem que foi baixado, código publicado em uma fonte confiável):

$ gem cert --add gem-public_cert.pem

A instalação deve ser bem-sucedida agora.