SSL证书签发

HTTPS

HTTPS = HTTP + TLS/SSL

TLS/SSL

SSL:Secure Sockers Layer,安全套接层
TLS:标准化之后的SSL

TLS

提供隐私和数据两个通信实体之前的完整性
由两层组成:TLS记录协议(TLS Record)和TLS握手协议(TLS Handshake)

单向认证 vs 双向认证

SSL的核心在于提供安全可信的通讯
实际应用中,通常有单向认证和双向认证两种实现方式

SSL单向认证

1 客户端:发送客户端SSL版本信息等
2 服务端:返回SSL版本信息等及服务器公钥
3 客户端:校验证书是否合法
验证证书是否过期、CA是否可靠等
4 客户端:发送对称加密方案给服务端
5 服务端:选择加密方式
6 服务端:将加密方案明文发送给客户端
7 客户端:产生随机码,生成对称加密密钥,使用服务端公钥加密,发送服务端
8 服务端:使用私钥解密,获得对称加密密钥
9 握手结束,对称加密,安全通信

SSL双向认证

1 客户端:发送客户端SSL版本信息等
2 服务端:返回SSL版本信息等及服务器公钥
3 客户端:校验证书是否合法
4 客户端:将自己的证书和公钥发送至服务端
5 服务端:校验客户端证书,获得客户端公钥
6 客户端:发送对接加密方案给服务端
7 服务端:选择加密方式
8 服务端:将加密方案使用客户端公钥加密后发送给客户端
9 客户端:使用私钥解密,获得加密方式,产生随机码,生成对称加密密钥,使用服务端公钥加密后,发送给服务端
10 服务端:使用私钥解密,获得对称加密密钥
11 握手结束,对称加密,安全通信

SSL构建

SSL核心的概念:ca、私钥、公钥、证书

私钥

私钥默认格式为pkcs1,一个简化的私钥生成命令:
openssl genrsa -out private.pem 3072
java对私钥格式有要求,需要转换为pkcs8格式,转换命令:
openssl pkcs8 -topk8 -inform PEM -in private.pem -outform PEM -nocrypt -out private-pkcs8.pem

如何将pkcs8格式证书还原成pkcs1格式?
openssl rsa -in private-pkcs8.pem -out pkcs1.pem

CA

认证中心,第三方认证提供方,为证书提供可靠性认证
开发过程中一般使用自签发证书进行测试,再使用正式签发的证书
CA在使用时,主要是使用ca证书,ca证书由ca key签发而来

生成自签发的CA证书

要素: CA私钥、CA CSR、签发证书

  • 生成CA私钥
    openssl genrsa -out cakey.pem 3072
  • 生成自签证书
    openssl req -new -x509 -key cakey.pem -out cacert.pem

这一步也可以拆分为两步
1 生成CSR
openssl req -new -key cakey.pem -out client.csr
2 签发证书
openssl x509 -req -in client.csr -signkey cakey.pem -out client.crt

中间根据提示输入Country NameState or Province Name等等

如何查看证书内容?
openssl x509 -text -in cacert.pem

生成自签 CA证书

组成:CA根证书、签发客户端证书

创建CA根证书
  • 1 创建CA目录
mkdir -p ~/ssl/{certs, newcerts, crl, private}
cd ~/ssl
touch index.text
ehco "01" > serial
  • 2 修改openssl.cnf文件
    自定义证书的和证书申请中的一些属性和扩展
cp /etc/ssl/openssl.cnf ~/ssl/.
vi ~/ssl/openssl.cnf
  • 3 生成CA根证书和密钥
    openssl req -new -x509 -newkey rsa:4096 -keyout cakey.key -out cacert.crt -config openssl.cnf -days 365

使用 X.509 证书结构生成证书,X.509 证书的结构是用 ASN1(Abstract Syntax Notation One)进行描述数据结构, X.509 证书编码格式主要有两种: .PEM 和.DER。
.DER 是二进制编码,可包含所有私钥、公钥和证书,是大多数浏览器的缺省格式,常见于 Windows 系统中的证书格式。
.PEM 是明文格式的, 以 “-----BEGIN CERTIFICATE----- 开头,已 -----END CERTIFICATE----- 结尾”, 中间是经过 base64 编码的内容, Apache 和 NGINX 服务器偏向于使用这种编码格式,也是 openssl 默认采用的信息存放方式。PEM 其实就是把 DER 的内容进行了一次 base64 编码。
此处通过命令生成扩展名为.crt 的根证书文件和扩展名为.key 的公钥,生成的证书和公钥可能是.PEM 编码格式,也可能是.DER 编码格式。

  • 4 查看证书,编码、转码
    查看密钥
    openssl rsa -noout -text -in cakey.key
    查看证书
    openssl x509 -noout -text -in cacert.crt
    编码格式转换
    PEM转DER:openssl x509 -in cacert.crt -outform der -out cacert.der
    DER转PEM:openssl x509 -in cacert.crt -inform der -outform pem -out cacert.pem
签发客户端证书

使用 OpenSSL 创建客户端证书时,请注意
创建私钥时,请将长度指定为 4096
创建证书时,对于 -extensions 参数,指定 usr_cert

  • 1 生成客户端密钥
    openssl genrsa -out client.key 4096
  • 2 生成csr
    openssl req -new -key client.key -out client.csr -config openssl.cnf
  • 3 使用CA根证书签发客户端签发证书
    openssl ca -in client.csr -out client.crt -cert cacert.crt -keyfile cakey.key -config openssl.cnf
  • 4 把客户端证书和密钥保存为.pem格式
    cat client.crt client.key > client.pem
生成正式证书

生成私钥
openssl genrsa -out product.key 3072
生成证书签发请求
openssl req -new -key product.key -out product.csr
将证书签发请求发送至CA,签发证书,这一步一般无法感知,大概的意思就是执行下面的签发命令
openssl ca -in product.csr -out product.crt -days 365
上面这一条还是隐藏了很多细节,再看下面的
签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in product.csr -out product.crt
这个product.crt就是正式可以使用的证书了

CA自身的crt的问题有点像“鸡”和“蛋”的问题,实际上初始的crt是自签发的
然后再以“合法”的形式,给其他的ca授权
这是个一本万利可持续的生意

来个SSL证书认证的例子

生成认证私钥/公钥
  • 生成服务器端私钥
    openssl genrsa -out server.key 1024
  • 生成服务器端公钥
    openssl rsa -in server.key -pubout -out server.pem
  • 生成客户端私钥
    openssl genrsa -out client.key 1024
  • 生成客户端公钥
    openssl rsa -in client.key -pubout -out client.pem
生成自签发 CA 证书
  • 生成 CA 私钥
    openssl genrsa -out ca.key 1024
  • 生成CSR
    openssl req -new -key ca.key -out ca.csr
  • 生成CA证书
    openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt

使用上面的命令会提示输入
➜ keys openssl req -new -key ca.key -out ca.csr
You are about to be asked to enter information that will be incorporated into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.


Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhejiang
Locality Name (eg, city) []:Hangzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:My CA
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:
注意,这里的 Organization Name (eg, company) [Internet Widgits Pty Ltd]: 后面生成客户端和服务器端证书的时候也需要填写,不要写成一样的!!!可以随意写如:My CA, My Server, My Client。
Common Name (e.g. server FQDN or YOUR name) []: 这一项,是最后可以访问的域名,这里为了方便测试,写成 localhost

生成最终服务器端证书和客户端证书
  • 生成证书
    签名过程需要 CA 的证书和私钥参与,最终颁发一个带有 CA 签名的证书
    openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt
    openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in client.csr -out client.crt
  • 再转换一个pkcs8格式的证书
    openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in polyglot.key -out polyglot-pkcs8.key

参考链接

TLS单向认证和双向认证的区别

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容