如何从SSL证书创建PEM文件?
这些是我提供的文件:
.crt
server.csr
server.key
可能重复:
如何从.key和.crt文件获取.pem文件?
如何将.crt转换为.pem?
是否有一些高级方法将X509Certificate写入PEM格式的字符串?目前我正在使用x509cert.encode()将其写入DER格式的字符串,然后对其进行64位编码并附加页眉和页脚来创建PEM字符串,但这看起来很糟糕.特别是因为我也必须在线下休息.
我需要将我的iPhone应用程序与系统集成,他们需要通过给定的公钥加密数据,有3种不同格式的文件.xml .der和.pem,我研究过并发现了一些关于从中获取SecKeyRef的文章DER/PEM,但它们总是返回零.以下是我的代码:
NSString *pkFilePath = [[NSBundle mainBundle] pathForResource:@"PKFile" ofType:@"der"];
NSData *pkData = [NSData dataWithContentsOfFile:pkFilePath];
SecCertificateRef cert;
cert = SecCertificateCreateWithData(NULL, (CFDataRef) pkData);
assert(cert != NULL);
OSStatus err;
if (cert != NULL) {
err = SecItemAdd(
(CFDictionaryRef) [NSDictionary dictionaryWithObjectsAndKeys:
(id) kSecClassCertificate, kSecClass,
(id) cert, kSecValueRef,
nil
],
NULL
);
if ( (err == errSecSuccess) || (err == errSecDuplicateItem) ) {
CFArrayRef certs = CFArrayCreate(kCFAllocatorDefault, (const void **) &cert, 1, NULL);
SecPolicyRef policy = SecPolicyCreateBasicX509();
SecTrustRef trust;
SecTrustCreateWithCertificates(certs, policy, &trust);
SecTrustResultType trustResult;
SecTrustEvaluate(trust, …
Run Code Online (Sandbox Code Playgroud) 我有一个.cer证书文件,需要提取公钥.我只能提取到PEM格式."outform"参数不执行任何操作.
openssl x509 -inform PEM -in certificate.cer -outform DER -pubkey -noout > publickey.der
Run Code Online (Sandbox Code Playgroud)
是否可以以DER格式提取?
我有2个文件 - CSR.csr和newkey.key,两者似乎都是PEM格式,如下所示 -
-----BEGIN CERTIFICATE REQUEST-----
MIID....
-----END CERTIFICATE REQUEST-----
-----BEGIN RSA PRIVATE KEY-----
MI...
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)
当我尝试读取CSR.csr文件时,出现以下错误:
$ openssl x509 -in CSR.csr -text -noout
unable to load certificate
140518720210760:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:698:Expecting: TRUSTED CERTIFICATE
Run Code Online (Sandbox Code Playgroud)
我读到当输入文件是DER格式时我们得到这个错误,所以我尝试了以下 -
$ openssl x509 -inform DER -in CSR.csr -text -noout
Run Code Online (Sandbox Code Playgroud)
但现在我得到了错误 -
unable to load certificate
140519053051720:error:0D0680A8:asn1 encoding routines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1320:
140519053051720:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:382:Type=X509
Run Code Online (Sandbox Code Playgroud)
当输入文件已经是PEM格式并且尝试以DER格式读取它时,似乎会发生此错误.
因为我是SSL新手,所以真的很困惑.请帮忙!
我在Base64中的String中有我的私钥和公钥,其中使用ANS1 DER进行编码.我尝试创建java的实例PrivateKey
并PublicKey
:
byte [] llave2 = DatatypeConverter.parseBase64Binary(key);
PKCS8Key pkcs8 = new PKCS8Key( llave2, password.toCharArray()); //line 2
llave2 = pkcs8.getDecryptedBytes(); //line 3
certificado = DatatypeConverter.parseBase64Binary(cer);
KeyFactory kf = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec ks = new PKCS8EncodedKeySpec(llave2);
PrivateKey privateKey = kf.generatePrivate(ks);
X509EncodedKeySpec x = new X509EncodedKeySpec(certificado);
PublicKey publicKey = kf.generatePublic(x);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误PublicKey publicKey = kf.generatePublic(x)
.
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException: ObjectIdentifier() -- data isn't an object ID (tag = -96)
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(Unknown Source)
at java.security.KeyFactory.generatePublic(Unknown Source)
at vital.cancelaciones.GeneraXMLCancelacion.main(GeneraXMLCancelacion.java:118)
Caused by: java.security.InvalidKeyException: …
Run Code Online (Sandbox Code Playgroud) 使用OpenSSL API,我从X.509v3证书中提取了一个自定义扩展,其中包括:
X509_EXTENSION* ex = X509_get_ext(x509, 4);
Run Code Online (Sandbox Code Playgroud)
X509_EXTENSION对象包含一个值(ex-> value),它是ASN.1 OCTET STRING.OCTET STRING包含DER编码的UTF-8字符串.我正在尝试解码OCTET STRING以获得普通的UTF-8字符串.
我尝试过一些东西,比如:
ASN1_STRING_to_UTF8(&buf, ex->value);
Run Code Online (Sandbox Code Playgroud)
和
M_ASN1_OCTET_STRING_print(bio, ex->value);
int len = BIO_read(bio, buf, buf_size);
buf[len] = '\0';
Run Code Online (Sandbox Code Playgroud)
这些都给我DER编码的字符串.如何获得普通的UTF-8字符串?
我们正在为我们的一个客户在SSL握手中添加服务器证书验证.作为密码学和C世界的新手,我想首先要清楚我对这些事情的概念,然后从实施开始.
因此,我搜索了大量关于证书概念的内容,但无法更清楚地了解我的概念,令我满意.实际上它增加了更多的混乱.:)
以下是一些我几乎无法理解的事情:1.什么是base64格式?与DER相同吗?2. PEM文件总是包含base64内容?3. Windows证书库使用的格式是什么?它是二进制的吗?
有人可以帮我这里.如果这些事情得到了解决,我将非常感激.
有几种工具可以自动生成用于读取和编写BER编码文件的C++(或其他)代码.在我的C++项目中,我需要库来读取和修改BER编码文件.我不能基于给定的数据结构生成C++类,因为没有给定的数据结构.用户应该能够添加和删除整数,字符串等.我发现了一个开源项目,它有一个具有这种功能的编辑器:http: //www.codeproject.com/Articles/4910/ASN-1-Editor
但是,这是在C#....
请告诉我,如果您知道如何获得一个具有此功能的好C++库,我可以将其用于我的C++项目.
der ×10
pem ×6
asn.1 ×4
certificate ×3
openssl ×3
ssl ×3
x509 ×3
java ×2
public-key ×2
base64 ×1
c++ ×1
crt ×1
encryption ×1
extract ×1
iphone ×1
private-key ×1
rsa ×1