如何从 PEM 证书创建 x.509 证书?

如何从 PEM 证书创建 x.509 证书?

我正在尝试在本地测试一个脚本,该脚本涉及使用基于 Java 的程序将文件上传到 FileZilla FTPES 服务器。

对于真实的东西,FZ 服务器上有一个真正的证书,并且上传步骤(单独测试)似乎运行良好。

我已经在开发机上安装了 FileZilla Server(因此它将测试从本地主机到本地主机的上传)。当然,我没有真正的证书,因此我使用了 FZ 中的“生成新证书...”按钮。它在交互式 FTPES 程序中运行良好(只要我同意未知证书),但在我的 Java 程序中它会抛出 javax.net.ssl.SSLHandshakeException(“无法找到到请求目标的有效认证路径”)。

那么我该如何告诉 Java 我同意这个证书呢?

(我知道有一种方法可以改变 Java 程序以接受任何证书,但我不想走那条路。我想像在生产中发生的那样测试它,并且我不想在生产中忽略未知的证书。)

我发现 Java 中有一个名为“keytool”的程序,似乎可以管理这类事情,但它抱怨 FZ 生成的证书文件不是“x.509”文件。FZ 方面的一篇帖子说它是“PEM 编码的”。我这里有“openssl”,它看起来非常适合在证书格式之间进行转换,但我认为我对证书格式的理解是错误的,因为我没有看到任何明显的东西。

我对安全证书的了解有点不清楚,所以如果我的标题有误,请帮忙修改。:-)

答案1

PEM 只是一种以 base64 形式对二进制数据进行编码的机制。大多数 x.509 证书都是 PEM 编码的;它们看起来像这样:

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

您可以使用 openssl 检查此类证书,如下所示:

$ openssl x509 -in filename -noout -text

对于上述证书,这将打印:

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)

...还有一堆其他的东西。这就是你可以 (a) 验证你的文件是否包含证书,以及 (b) 查看证书详细信息的方法。

相关内容