制作数字证书

一、证书格式

  • X.509:是一种基本的数字证书标准,定义了证书中应该包含哪些内容。它只有公钥,常见的编码格式如 PEM和 DER。
  • p7:一般是把证书分成两个文件,一个公钥一个私钥。一般是分发公钥用。
  • p12:使用PKCS#12 标准定义,包含了公钥和私钥的二进制格式的证书形式(私钥用密码加密),以 .pfx 作为证书文件后缀名
  • DER :文件是DER 编码的二进制格式,证书中没有私钥。以 .der、.cer 作为证书文件后缀名。
  • PEM:一般是Base64 编码的文本格式。可以存放私钥,多个公钥、私钥可以被包含到一个文件中。内容包含前缀---begin---、----end----。以 .cer 、.key、.pub为文件后缀名。OpenSSL 使用 PEM 格式来存放各种信息,也是 CA颁发证书最常用的格式。
  • keystore:keytool生成证书的存储库,用来存储若干条目,每一条目包含公私钥,主体信息等。默认为用户目录下.keystore,相当于一个有密码保护的文件。
  • truststore:与keystore格式相同,但是为区分只用来存放信任的证书如CA,不存密钥等信息。
  • .jks:二进制格式,同时包含证书和私钥,一般有密码保护。
  • .csr:证书请求文件格式,包含公钥和主体信息,发给ca,ca用私钥对内容签名并制作成证书返回。keytool在生成csr文件时需要指定证书(即公钥与主体信息)。
  • .crt:一般用于linux系统的证书格式,包含公钥和主体信息。可以是二进制格式,可以是文本格式。

二、OpenSSL

  • 查看版本信息:openssl version

  • 查看证书信息
    openssl x509 -in server-cert.pem -text -noout

  • 验证证书和私钥是否匹配
    由于证书可能以不同的格式(如PEM或DER)输出的,无法直接比较文本内容。通过计算哈希值(如MD5、SHA-256)是否相同判断证书和私钥是否匹配。
    openssl x509 -in certificate.crt -pubkey -noout | openssl md5
    openssl rsa -in private.key -pubout | openssl md5

  • 验证证书的有效性
    检查证书链和信任根。简单的验证证书签名是否有效
    openssl verify -CAfile CA_certificate.crt certificate.crt

  • 将PFX文件转为一个PEM文件。
    PFX转PEM后文件中包含认证证书和私钥,需要把它们分开存储。
    openssl pkcs12 -in certificate.pfx -out certificate.cer -nodes

  • CER转DER
    openssl x509 -in cert.crt -outform der -out cert.der

  • DER转PEM
    openssl x509 -in cert.crt -inform der -outform pem -out cert.pem

1、生成自签名CA证书

  • 生成CA私钥
    openssl genrsa -aes256 -passout pass:$password -out ca-private-key.pem 4096
  • 生成CA证书
    openssl req -new -x509 -days 36500 -key ca-private-key.pem -passin pass:$password -sha256 -out ca.pem -subj "/C=CN/ST=BeiJing/L=BeiJing/O=$Organizationa/CN=$ip"

2、使用自签名证书签发服务器证书

  • 生成服务端私钥
    openssl genrsa -out server-private-key.pem 4096
  • 生成服务器证书的CSR
    openssl req -subj "/CN=$ip" -sha256 -new -key server-private-key.pem -out server.csr
  • 使用CA证书和私钥签发服务器证书
    openssl x509 -req -days 3650 -sha256 -in server.csr -CA ca.pem -CAkey ca-private-key.pem -passin "pass:$password" -CAcreateserial -out server-cert.pem

3、使用自签名证书签发客户端证书

  • 生成客户端私钥
    openssl genrsa -out key.pem 4096
  • 生成客户端证书的CSR
    openssl req -subj '/CN=client' -new -key key.pem -out client.csr
  • 使用CA证书和私钥签发客户端证书
    openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem -passin "pass:$password" -CAcreateserial -out cert.pem -extfile extfile-client.cnf

三、keytool

keytool是Java的数据证书管理工具,可存放公钥、私钥、证书。文件通常是.jks格式。.keystore是一种通用的密钥库格式,.jks是.keystore的一种实现。

  • 生成密钥对(签名文件)
    keytool -genkeypair -v -storetype PKCS12 -keysize 2048 -dname “C=CN/ST=BeiJing/L=BeiJing/O=$Organizationa/CN=$ip” -alias $signtest4 -keyalg RSA -validity 36500 -destalias $signtest4 -keypass $a123456 -keystore signtest4.jks -storepass $a123456
  • 生成密钥(对称加密方式)
    keytool -genseckey -v -storetype PKCS12 -alias signtest5 -keypass 123456 -keyalg DES -keysize 56 -keystore ./signtest5.jks -storepass 123456
  • 为存在的keystore生成证书请求文件CSR
    keytool -certreq -alias mydomain -keystore keystore.jks -file mydomain.csr
  • 导入根证书到keystore
    keytool -import -trustcacerts -alias root -file mydomain.crt -keystore keystore.jks
  • 导入可信任证书到keystore
    keytool -import -trustcacerts -alias mydomain -file mydomain.crt -keystore keystore.jks
  • 查看单个证书
    keytool -printcert -v -file mydomain.crt
  • 列出keystore存在的所有证书
    keytool -list -v -keystore keystore.jks
  • 提取公钥证书
    将证书信息打印,复制---begin---、----end---的内容。如果某个别名中存的是证书链,自上而下第一个为自己的证书,然后是中间证书、根证书。复制证书链的所有证书然后保存到一个xxx.pem文件中,注意:在pem中证书的顺序自上而下第一个是根证书,最后一个是自己的证书,顺序错误会导致验证失败。
    keytool -list -rfc -keystore yao.jks -storepass 123456
  • 提取证书私钥
    不能直接得到 jks文件中的私钥,需要通过openssl将jks文件转换成pfx格式,然后再进行提取
    keytool -importkeystore -srckeystore <jks-file> -destkeystore <pkcs12-file>.p12 -deststoretype PKCS12
    openssl pkcs12 -in <pkcs12-file>.p12 -nocerts -nodes -out <private-key>.key

四、国密

  • 国密算法是基于SM2公钥密码算法的一种非对称加密算法。
    openssl中,支持sm2的公私钥的生成方法,不过其名称并不是sm2的字面意思,而是ec
  • 生成密钥对
    openssl ecparam -name sm2 -genkey -noout -out sm2key.pem
  • 证书请求文件 CSR
    openssl req -new -key sm2key.pem -out sm2csr.pem
  • 签发自签名证书
    openssl x509 -req -in sm2csr.pem -signkey sm2key.pem -out sm2cert.pem
  • 将证书转换为PKCS#12格式
    openssl pkcs12 -inkey sm2key.pem -in sm2cert.pem -export -out sm2cert.p12
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,729评论 6 517
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,226评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 169,461评论 0 362
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,135评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,130评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,736评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,179评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,124评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,657评论 1 320
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,723评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,872评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,533评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,213评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,700评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,819评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,304评论 3 379
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,876评论 2 361