Como criar um certificado x.509 a partir de um PEM?

0

Estou tentando testar um script, localmente, que envolve o upload de um arquivo usando um programa baseado em Java para um servidor FTP do FileZilla.

Para a coisa real, existe um certificado real no servidor FZ, e a etapa de upload (testada sozinha) parece funcionar bem.

Instalei o FileZilla Server na minha caixa dev (para testar o upload do localhost para o localhost). Eu não tenho um certificado real para isso, é claro, então usei o botão "Gerar novo certificado ..." em FZ. Ele funciona bem a partir de um programa FTPES interativo (desde que eu OK o certificado desconhecido), mas do meu programa Java lança um javax.net.ssl.SSLHandshakeException ("não é possível encontrar o caminho de certificação válido para o alvo solicitado").

Então, como eu digo ao Java que este certificado está OK comigo?

(Eu sei que há uma maneira de mudar o programa Java para aceitar qualquer certificado, mas eu não quero ir por esse caminho. Eu quero testá-lo assim como vai acontecer na produção, e eu não quero para ignorar certificados desconhecidos em produção.)

Descobri que o Java tem um programa chamado "keytool" que parece ser para gerenciar esse tipo de coisa, mas reclama que o arquivo de certificado que o FZ gerou não é um arquivo "x.509". Uma postagem do lado da FZ disse que era "PEM codificado". Eu tenho "openssl" aqui, que parece ser perfeito para converter entre formatos de certificado, mas acho que meu entendimento de formatos de certificado está errado porque não estou vendo nada óbvio.

Meu conhecimento de certificados de segurança é um pouco instável, por isso, se o meu título é estupidamente errado, por favor ajude corrigindo isso. : -)

    
por Ken 12.01.2011 / 00:21

1 resposta

2

O PEM é apenas um mecanismo de codificação de dados binários em uma representação de base64. A maioria dos certificados x.509 é codificada pelo PEM; eles se parecem com algo assim:

-----BEGIN CERTIFICATE-----
MIICbDCCAdWgAwIBAgIJALeUXoWyGYBYMA0GCSqGSIb3DQEBBQUAMCoxGzAZBgNV
BAMMEmh4NTA5IFRlc3QgUm9vdCBDQTELMAkGA1UEBhMCU0UwHhcNMDcxMTE1MDY1
ODU2WhcNMTcxMTEyMDY1ODU2WjAqMRswGQYDVQQDDBJoeDUwOSBUZXN0IFJvb3Qg
Q0ExCzAJBgNVBAYTAlNFMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHcvJb
yJXPhM9HHq1hU6d2Cu1fW9o1CvObirn1SNZg+pTnQgO9Lv4VjQQfltNK0aovyLJa
UdbAbsRCfH+79YY2tU76x8aXpUri0DfUv5PGscIZzW7WULaaXxBgHo1owzmhc1Qj
F9JDEurJXGFEZaDsPcEwY40RjrKDL8SXzEoEwwIDAQABo4GZMIGWMB0GA1UdDgQW
BBSM5w21xd5phXUsCKHeUxUwnKHoADBaBgNVHSMEUzBRgBSM5w21xd5phXUsCKHe
UxUwnKHoAKEupCwwKjEbMBkGA1UEAwwSaHg1MDkgVGVzdCBSb290IENBMQswCQYD
VQQGEwJTRYIJALeUXoWyGYBYMAwGA1UdEwQFMAMBAf8wCwYDVR0PBAQDAgHmMA0G
CSqGSIb3DQEBBQUAA4GBAIBa6mq1aytlbhixD6q4PROg7P1OGX6nr5CkC96CC+Xp
5UTLZEVIddkrBswNAAS0p5eEorO8xD9eT5ztZ0oYITymsO1sEIfDLks+LhdBoyF7
TX24INRwjlqsC8UlbRFoClxIMNhrMwcC3oZ4oLddV2OmA0IOG6yHXvEOQq0sTotr
-----END CERTIFICATE-----

Você pode examinar tal certificado usando o openssl assim:

$ openssl x509 -in filename -noout -text

Para o certificado acima, isso imprime:

Certificate:
Data:
    Version: 3 (0x2)
    Serial Number:
        b7:94:5e:85:b2:19:80:58
    Signature Algorithm: sha1WithRSAEncryption
    Issuer: CN=hx509 Test Root CA, C=SE
    Validity
        Not Before: Nov 15 06:58:56 2007 GMT
        Not After : Nov 12 06:58:56 2017 GMT
    Subject: CN=hx509 Test Root CA, C=SE
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
        RSA Public Key: (1024 bit)
            Modulus (1024 bit):
                00:c7:72:f2:5b:c8:95:cf:84:cf:47:1e:ad:61:53:
                a7:76:0a:ed:5f:5b:da:35:0a:f3:9b:8a:b9:f5:48:
                d6:60:fa:94:e7:42:03:bd:2e:fe:15:8d:04:1f:96:
                d3:4a:d1:aa:2f:c8:b2:5a:51:d6:c0:6e:c4:42:7c:
                7f:bb:f5:86:36:b5:4e:fa:c7:c6:97:a5:4a:e2:d0:
                37:d4:bf:93:c6:b1:c2:19:cd:6e:d6:50:b6:9a:5f:
                10:60:1e:8d:68:c3:39:a1:73:54:23:17:d2:43:12:
                ea:c9:5c:61:44:65:a0:ec:3d:c1:30:63:8d:11:8e:
                b2:83:2f:c4:97:cc:4a:04:c3
            Exponent: 65537 (0x10001)

... e um monte de outras coisas. É assim que você pode (a) verificar se seu arquivo contém um certificado e (b) ver os detalhes do certificado.

    
por 12.01.2011 / 01:35