与PEM和DER证书混淆

时间:2016-08-01 16:11:35

标签: ssl certificate pem der

我正在开发一个使用第三方框架和SSL的iOS应用程序 为了连接到服务器,我需要传递服务器证书,客户端证书和密码:

[HostConfiguration hostConfigurationWithAddress:@"demo.server...."
                                           port:743
                                 securedWithSSL:YES
                                 serverCertPath:[[NSBundle mainBundle] pathForResource:@"SERVER-CERT" ofType:@"der"]
                            clientCertChainPath:[[NSBundle mainBundle] pathForResource:@"CLIENT-CERT" ofType:@"p12"]
                                chainPassphrase:@"ABCDEFG"];

所以,我要求他们支持的证书连接,他们发给我一个zip文件(我使用的是mac):

  • chain_2016.pem(mac标识为“Root”)
  • 密码
  • yourCertificate.pem(“标准”)
  • yourCertificate.p12(“个人”)

密码短语文件包含两个字符串,p12文件的密码短语和32个字符长的字符串,我不知道它的用途。它看起来像这样:53CFE0E1914EF853E148F29C0A56B716

我知道p12文件和密码是正确的。但令我困惑的是两个PEM文件,其中我只需要一个DER编码证书。我尝试使用
将每个PEM转换为DER openssl x509 -in ...
但它不起作用......

我打印出chain_2016yourCertificate.pem的内容,并注意到yourCertificate.pem包含chain_2016以及两个额外的证书。

chain_2016.pem

cat chain_2016.pem
-----BEGIN CERTIFICATE-----
MIIERTCCAy2gAwIBAgIINQskOyELGawwDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq
[...]
VPEpWKH17rzBvmktsDjqo1Zch8xiWSzP0DnJJw13Zn/cPwBJkHY0LPA=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFSzCCBDOgAwIBAgIIPuhYaSjrBR8wDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq
[...]
ZeitvrwyCtzVo7NWb+Zf
-----END CERTIFICATE-----

yourCertificate.pem

cat yourCertificate.pem
Bag Attributes
localKeyID: 2E EC 57 1C 31 82 6D 82 68 59 86 93 FB FA 65 16 58 85 21 22 
friendlyName: myApp.test.client
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCu9UVuZyLsOc5u
[...]
zoQQfIreqU9KN4nhmZLKR0zY
-----END PRIVATE KEY-----
Bag Attributes
localKeyID: 2E EC 57 1C 31 82 6D 82 68 59 86 93 FB FA 65 16 58 85 21 22 
friendlyName: myApp.test.client
...Here some other info like subject/email etc...
-----BEGIN CERTIFICATE-----
MIIHljCCBX6gAwIBAgIIETxy2amJI0cwDQYJKoZIhvcNAQENBQAwgbUxHjAcBgkq
[...]
hdAq5P+vcHfD8cGOdI61yJB2PgJg67lWviU=
-----END CERTIFICATE-----
Bag Attributes
friendlyName: CompanyName Meta ROOT CA TEST
...Again some other info like subject/email etc...
-----BEGIN CERTIFICATE-----
MIIERTCCAy2gAwIBAgIINQskOyELGawwDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq

[This is the same as one of the certificates in chain_2016]

VPEpWKH17rzBvmktsDjqo1Zch8xiWSzP0DnJJw13Zn/cPwBJkHY0LPA=
-----END CERTIFICATE-----
Bag Attributes
friendlyName: CompanyName SUB TEST ROOT CA 1
...Again some other info like subject/email etc...
-----BEGIN CERTIFICATE-----
MIIFSzCCBDOgAwIBAgIIPuhYaSjrBR8wDQYJKoZIhvcNAQEFBQAwga8xHjAcBgkq

[Second certificate in chain_2016]

ZeitvrwyCtzVo7NWb+Zf
-----END CERTIFICATE-----

由于这是我第一次使用SSL,我希望有人可以帮助我。 谢谢!

更新
谢谢pedrofb,正如我所说,我已经尝试过了:

  

我尝试使用
将每个PEM转换为DER   openssl x509 -in ...
  但它不起作用......

使用此框架有两个步骤。首先,建立与服务器的连接,然后执行操作。使用任何一个转换后的DER文件允许我连接,但是当我尝试执行一个动作(例如登录)时,我得到“你没有被授权进行这个动作”。这是否意味着证书的一切正常,而错误来自与SSL无关的其他地方?

1 个答案:

答案 0 :(得分:1)

您似乎正在执行双向SSL。你需要:

  • 要添加到信任库的服务器证书路径,并在握手期间进行验证。可能是chain_2016.pem
  • 握手时出现的客户端证书。 yourCertificate.p12和passhphrase

PEM文件可能包含多个证书和/或私钥。它们由----- BEGIN ----- -----END -----标题分隔。

可能他们在yourCertificate.pemyourCertificate.p12中发送了相同的信息,只是改变了格式,密码在第一种情况下与私钥相对应,在第二种情况下密码与p12相对应文件。您可以使用GUI工具KeyStoreExplorer或openssl

轻松检查.p12文件的内容

DER 是用于对证书进行编码的二进制格式。 PEM 是转换为base64并添加标头的DER文件。要将PEM转换为DER,请使用openssl(请参阅this

 openssl x509 -in chain_2016.pem -outform der -out chain_2016.der

因此,总而言之,检查您的文档,我认为您需要

serverCertPath: chain_2016.der
clientCertChainPath: yourcertificate.p12
chainPassphrase: theP12Passphrase