【OpenSSL】使用证书和私钥导出P12格式个人证书

1, 产生CA证书

1.1, 生成ca的私钥
openssl genrsa -out cakey.pem 2048

1.2, 生成ca的自签名证书请求

openssl req -new -key cakey.pem -subj "/CN=Example Root CA" -out cacsr.pem

1.3, 自签名ca的证书

openssl x509 -req -in cacsr.pem -signkey cakey.pem -days 999 -out cacert.pem

2, 产生个人证书

2.1, 生成个人证书的私钥
openssl genrsa -out alicekey.pem 2048

2.2, 生成个人证书请求

openssl req -new -key alicekey.pem -subj "/emailAddress=alice@example.com" -out alicecsr.pem

2.3, 签发个人证书

openssl x509 -req -in alicecsr.pem -CA cacert.pem -CAkey cakey.pem -days 999 -set_serial 01 -out alicecert.pem

3, 合并证书和私钥得到p12格式的个人证书

openssl pkcs12 -export -in alicecert.pem -inkey alicekey.pem -certfile cacert.pem -out alice.p12

4, 提取个人证书

openssl pkcs12 -in alice.p12 -nokeys -clcerts -out alicecert.pem

5, 提取个人证书的私钥

openssl pkcs12 -in alice.p12 -nocerts -out alicekey.pem

6, 提取ca证书

openssl pkcs12 -in alice.p12 -nokeys -cacerts -out cacert.pem

备注:

1,绑定ca证书的时候,-certfile和-CAfile的区别 http://arstechnica.com/civis/viewtopic.php?p=24680099
You're right, the documentation is confusing (man page here*), but I think I've figured it out, after some testing:
-certfile adds all certificates in that file to the .p12 store (in addition to the input certificate).
-CAfile and -CApath are used to build the "standard CA store" (just as they do for openssl s_client), which is only used with the -chain option, which will add the entire certification chain for the input certificate to the .p12, assuming it can be found in that file and/or directory. Without the -chain option they do nothing.
* Also, most distros supply man pages for the openssl subcommands under the subcommand name, e.g. pkcs(1).
seehttp://openssl.6102.n7.nabble.com/How-to-include-intermediate-in-pkcs12-td49603.html
A lotofthingsonthe Internet are wrong. The OpenSSL man page doesnotsay multipleoccurrences workandI’m pretty sure it never did, nor did the code.IngeneralOpenSSL commandlines don’t handle repeated options; the few exceptions are noted.pkcs12 -caname (NOT–cafile)ISoneofthe few that can be repeated,andpossiblysome thingsonthe Internet got that confused. However, the commandlines (at leastusually?) don’t *diagnose* repeated (andoverridden) options.pkcs12 –export gets certsfromuptothree places:- the input file (-inifspecifiedelsestdin redirectedorpiped)- -certfileifspecified (once,asyou saw)- the truststoreif–CAfileand/or–CApath specifiedIFNEEDEDInother words, any certininfileorcertfileisalwaysinthe output, neededornot.Ifthatsetdoesnotprovide a complete chain, pkcs12 willtrytocomplete itusingthe truststoreifspecified, but will produce output evenifit remains incomplete.Likeother commandlines,andmany programsusingthe library, the truststorecan be asinglefilewith–CAfile (NOT–cafile)ora directoryofhashnamedlinksorfileswith–CApathorboth.Ifthe cert you are puttinginpkcs12isunder a CA that you trust other peerstouseandthus you haveinyour truststore, easiesttouse itfromthere. Similarlyifyour certisunder an intermediate (orseveral) that you haveinyour truststoretoallow peerstouse evenifthe peers don’t send (asthey should), easiesttousefromthere.Otherwise IMO it’s easiesttojust putininfileor–certfile (ora combination),although theoptionoftemporarily creatingormodifying a truststore works. Whethertodoyour trustorewithCAfileorCApathorbothisa more general questionanddepends partlyonwhether you use somebody’s package.Forexample the curl website supplies the Mozilla truststoreinCAfile format;whenI wanttouse that I don’t bother convertingtoCApath format.From: [hidden email] [[hidden email]]OnBehalfOfEdward Ned Harvey (openssl)Sent: Tuesday, April22,201415:31To: [hidden email]Subject: *** Spam *** Howtoinclude intermediateinpkcs12?A bunchofthingsonthe internet saytodo"-cafile intermediate.pem -cafile root.pem"or"-certfile intermediate.pem -certfile root.pem"andthey explicitly say that calling these command-line options more than onceisokandwill resultinboth the certs being includedinthe final pkcs12... But I have found thistobe untrue.I have found, thatifI concatenate intermediate & rootintoasingleglom file,andthenI specify -certfile onceforthe glom,thenmy pfx file will include the complete chain. ButifI use -certfile twice, Igetno intermediateinmy pfx.AndI just wasted more time than I caretodescribe, figuring this out.So...Whileconcatenation/glomisa viable workaround, I'd like to know, what's supposed to work? And was it a new feature introduced after a certain rev or something? I have OpenSSL 0.9.8y command-line on Mac OSX, and OpenSSL 1.0.1e command-line on cygwin. I believe I've seen the same behavior in both.

-CAfile 的处理逻辑

/* If chaining get chain from user cert */
if (chain) {
int vret;
STACK_OF(X509) *chain2;
X509_STORE *store = X509_STORE_new();
if (!store) {
BIO_printf(bio_err, "Memory allocation errorn");
goto export_end;
}
if (!X509_STORE_load_locations(store, CAfile, CApath))
X509_STORE_set_default_paths(store);
vret = get_cert_chain(ucert, store, &chain2);
X509_STORE_free(store);
if (!vret) {
/* Exclude verified certificate */
for (i = 1; i < sk_X509_num(chain2); i++)
sk_X509_push(certs, sk_X509_value(chain2, i));
/* Free first certificate */
X509_free(sk_X509_value(chain2, 0));
sk_X509_free(chain2);
} else {
if (vret >= 0)
BIO_printf(bio_err, "Error %s getting chain.n",
X509_verify_cert_error_string(vret));
else
ERR_print_errors(bio_err);
goto export_end;
}
}

-certfile的处理逻辑

/* Add any more certificates asked for */
if (certfile) {
STACK_OF(X509) *morecerts = NULL;
if (!(morecerts = load_certs(bio_err, certfile, FORMAT_PEM,
NULL, e,
"certificates from certfile")))
goto export_end;
while (sk_X509_num(morecerts) > 0)
sk_X509_push(certs, sk_X509_shift(morecerts));
sk_X509_free(morecerts);
}

2,-name选项可以设置显示名称,否则导入证书的时候,可能会显示一些乱码

openssl 生成证书_使用证书和私钥导出P12格式个人证书!相关推荐

  1. iOS常见问题之苹果证书无法导出p12格式的文件

    本文介绍了苹果证书无法导出p12格式的文件的解决方法. 一.打开钥匙串导出证书的默认界面,发现p12选项为灰色,无法选择. 说明: 我对这种情况的证书进行测试,将直接导出.cer的证书,拷贝到其他电脑 ...

  2. 使用openssl生成CA、server、client私钥和证书(证书包括公钥)

    参考:SSL证书制作并使用NodeJs进行HTTPS认证配置 - 苍青浪 - 博客园 1. 生成CA证书及私钥: 1)生成一个私钥为ca-key.pem openssl genrsa -out ca- ...

  3. centos 配置证书_如何在CentOS 8上设置和配置证书颁发机构(CA)

    centos 配置证书 介绍 (Introduction) A Certificate Authority (CA) is an entity responsible for issuing digi ...

  4. java p12 ssl_从 p12 格式 SSL 证书解出 pem 格式公钥私钥给 Postman 使用

    目的 Postman 的(非 Chrome 扩展版的)app 并不能读取系统中的客户端证书,这种调试要发送客户端证书的 https 请求的时候就得自己另外设置. 系统直接导出证书有 cer 和 p12 ...

  5. 苹果开发者账号可以创建多少测试证书_苹果开发者账号如何制作苹果企业分发证书?...

    苹果企业开发者账号上哪回收?卡姆回收解决你各种问题,comeab.com欢迎你~查找卡姆苹果企业开发者账号回收 作为Apple企业开发计划的成员,我们可以创建多个Apple企业部署证书.此处需要的成员 ...

  6. x509证书_从Linux shell提示符中查看TLS/SSL证书有效期

    $ openssl s_client -servername {SERVER_NAME} -connect {SERVER_NAME}:{PORT} | openssl x509 -noout -da ...

  7. 导出期刊对应格式的参考_中文参考文献怎么一键导出正确格式?写作必看!

    之前遇到过一位作者,文章写的很标准,就是参考文献格式总是错的,问过他之后,他说都是自己一点点打上去的.下面给大家介绍一下中文参考文献的正确格式及如何一键导出,写作的必看. 中文参考文献的导出一般是知网 ...

  8. 使用openssl生成cer、p12证书

    这篇文件的资源也是参考了其他博主的文章,这里需要感谢这些博主.我这边只是做一个记录,方便日后查阅.谢谢! 创建证书的时候使用的密码都是11111111,故命令语句中都是按照该密码输入的. 一.准备工作 ...

  9. openssl 生成自签证书及查看证书细节

    生成X509格式的CA自签名证书 # openssl req -new -x509 -keyout ca.key -out ca.crt 生成服务端的私钥(key文件)及csr文件 # openssl ...

最新文章

  1. mysql as 后面字段_mysql 字段as详解及实例代码
  2. ASP.NET验证码C#
  3. Java RMI 多个JVM间相互通信
  4. vasp软件_量子力学分子动力学软件包-VASP
  5. 教你自己制作Vista与DOS双系统
  6. typedef struct 用法
  7. 2019计算机开机号003期,2019年011期福彩中心开机号(附汇总)
  8. 手把手带你玩转Tensorflow 物体检测 API (3)——训练模型
  9. oracle课程小结,Oracle 数据库优化实战心得总结
  10. 极兔正式入股百世快递
  11. bp神经网络的主要功能,BP神经网络的实现包括
  12. 【产品】固定成本、可变成本、沉没成本和机会成本
  13. C++ 命令行参数解析
  14. 共享停车位的市场现状,共享车位盘活城市闲置车位!
  15. python 实现轨迹数据可视化
  16. 【Java】Java编译时错误:A JNI error has occurred, please check your installation and try again
  17. itext 生成pdf 化学表达式或者字符的上标,下标不显示
  18. 麦当劳一“发币”,币圈就闹笑话,加密数字货币到底是什么?
  19. java实现注册登录版五子棋对战平台(超详细注释,内含人机实现)
  20. 毕业生在腾讯、百度、字节跳动就业人数全国高校第一!北京邮电大学2021届毕业生就业质量报告...

热门文章

  1. python第二十八课——编码小常识
  2. jQuery导入代码片段并绑定事件
  3. windbg调试相关命令
  4. Exception和RuntimeException的区别
  5. alibaba fastjson
  6. Android 如何添加一种锁屏方式
  7. windows笔记-内核对象
  8. Express 入门之Router - worldtree_keeper的专栏 - CSDN博客
  9. mysql绿色版安装
  10. [pytorch、学习] - 5.9 含并行连结的网络(GoogLeNet)