角色:
server 服務(wù)器就是網(wǎng)站所有者 夺荒、client 就是訪問網(wǎng)站的用戶 没宾、CA 證書頒發(fā)機(jī)構(gòu)。
客戶端與服務(wù)器https通訊步驟
1、客戶端發(fā)起請求摆霉,生成一個(gè)client_random發(fā)給服務(wù)器
2、服務(wù)器收到請求菠隆,返回證書譬重、sessionID、加密方式簿训、server_random
3血筑、客戶端收到證書,使用證書公鑰加密PreMaster密鑰煎楣。
4豺总、服務(wù)器使用私鑰節(jié)目取得PreMaster密鑰.
5、兩邊用PreMaster+client_random+server_random制作一個(gè)Master密鑰择懂。
6喻喳、使用Master密鑰完成數(shù)據(jù)傳輸。
證書基礎(chǔ)知識:
什么是公鑰和私鑰困曙?
公鑰和私鑰就是俗稱的不對稱加密方式表伦。公鑰(Public Key)與私鑰(Private Key)是通過一種算法得到的一個(gè)密鑰對(即一個(gè)公鑰和一個(gè)私鑰),公鑰是密鑰對中公開的部分慷丽,私鑰則是非公開的部分蹦哼。公鑰通常用于加密會(huì)話密鑰、驗(yàn)證數(shù)字簽名要糊,或加密可以用相應(yīng)的私鑰解密的數(shù)據(jù)纲熏。
通過這種算法得到的密鑰對能保證在世界范圍內(nèi)是唯一的。使用這個(gè)密鑰對的時(shí)候锄俄,如果用其中一個(gè)密鑰加密一段數(shù)據(jù)局劲,則必須用另一個(gè)密鑰才能解密。比如用公鑰加密的數(shù)據(jù)就必須用私鑰才能解密奶赠,如果用私鑰進(jìn)行加密也必須用公鑰才能解密鱼填,否則將無法成功解密。
數(shù)字證書
數(shù)字證書是一個(gè)經(jīng)證書授權(quán)中心(CA)數(shù)字簽名的包含公開密鑰擁有者信息以及公開密鑰的文件毅戈。
最簡單的證書包含一個(gè)公開密鑰苹丸、名稱以及證書授權(quán)中心的數(shù)字簽名。數(shù)字證書還有一個(gè)重要的特征就是只在特定的時(shí)間段內(nèi)有效苇经。
數(shù)字證書的作用
1赘理、https網(wǎng)站身份證明。通過證書能夠了解證書持有人(網(wǎng)站)的身份信息塑陵、域名信息感憾。
2、證書發(fā)行機(jī)構(gòu)信息,可以是樹狀阻桅。如果證書的根發(fā)行機(jī)構(gòu)是權(quán)威機(jī)構(gòu)凉倚,瀏覽器信賴權(quán)威機(jī)構(gòu),權(quán)威機(jī)構(gòu)對證書機(jī)構(gòu)樹信任鏈負(fù)責(zé)嫂沉,從而瀏覽器可以信任證書的持有人稽寒。如果證書的根發(fā)行機(jī)構(gòu)不是權(quán)威機(jī)構(gòu)(比如當(dāng)初的12306),需要用戶手動(dòng)信賴證書趟章,吐糟12306這個(gè)風(fēng)騷滴操作,完美支持釣魚網(wǎng)站杏糙、中間人偽造證書竊取信息。
3蚓土、加密傳輸數(shù)據(jù)宏侍。客戶端和服務(wù)端利用證書里面的公鑰協(xié)商一個(gè)對稱加密協(xié)議所需的密鑰蜀漆。然后加密傳遞數(shù)據(jù)谅河。
數(shù)字證書的制作
1、整理域名确丢、網(wǎng)站所有者信息绷耍。CA要對你提供的信息進(jìn)行驗(yàn)證。
2鲜侥、制作私鑰xxx.key和證書請求文件xxx.csr褂始。可以keytool制作也可以openSSL制作描函。
3崎苗、提交CSR和你的信息,申請證書赘阀。
數(shù)字證書格式介紹:
*.DER 或 *.CER 文件: 這樣的證書文件是二進(jìn)制格式益缠,只含有證書信息,不包含私鑰基公。
*.CRT 文件: 這樣的證書文件可以是二進(jìn)制格式,也可以是文本格式宋欺,一般均為文本格式轰豆,功能與 *.DER 及 *.CER 證書文件相同。
*.PEM 文件: 這樣的證書文件一般是文本格式齿诞,可以存放證書或私鑰酸休,或者兩者都包含。 *.PEM 文件如果只包含私鑰祷杈,一般用 *.KEY 文件代替斑司。
*.PFX 或 *.P12 文件: 這樣的證書文件是二進(jìn)制格式,同時(shí)包含證書和私鑰但汞,且一般有密碼保護(hù)宿刮。
ps.
.JKS文件不是證書文件互站,是使用keytool生成的keystore文件,存放私鑰和證書僵缺『遥可以導(dǎo)出私鑰和證書。
數(shù)字證書格式轉(zhuǎn)換:
將 JKS 格式證書轉(zhuǎn)換成 PFX 格式
可以使用 JDK 中自帶的 Keytool 工具磕潮,將 JKS 格式證書文件轉(zhuǎn)換成 PFX 格式翠胰。
執(zhí)行以下命令將 server.jks 證書文件轉(zhuǎn)換成 server.pfx 證書文件:
keytool -importkeystore -srckeystore D:\server.jks -destkeystore D:\server.pfx -srcstoretype JKS -deststoretype PKCS12
將 PFX 格式證書轉(zhuǎn)換為 JKS 格式
使用 JDK 中自帶的 Keytool 工具,執(zhí)行以下命令將 server.pfx 證書文件轉(zhuǎn)換成 server.jks 證書文件:
keytool -importkeystore -srckeystore D:\server.pfx -destkeystore D:\server.jks -srcstoretype PKCS12 -deststoretype JKS
將 PEM/KEY/CRT 格式證書轉(zhuǎn)換為 PFX 格式
將 KEY 格式密鑰文件(server.key)和 CRT 格式公鑰文件(server.crt)拷貝至 OpenSSL 工具安裝目錄自脯,使用 OpenSSL 工具執(zhí)行以下命令將證書轉(zhuǎn)換成 server.pfx證書文件:
openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt
將PFX轉(zhuǎn)換為PEM/KEY/CRT
將 PFX 格式證書文件拷貝至 OpenSSL 安裝目錄之景,使用 OpenSSL 工具執(zhí)行以下命令將證書轉(zhuǎn)換成 server.pem 證書文件、KEY 格式密鑰文件(server.key)和 CRT 格式公鑰文件(server.crt):
? openssl pkcs12 -in server.pfx -nodes -out server.pem
? openssl rsa -in server.pem -out server.key
? openssl x509 -in server.pem -out server.crt
使用 Keytool 工具生成 CSR 文件
CSR 文件證書請求文件膏潮,利用該文件申請證書锻狗。
使用 Keytool 工具生成 CSR 文件
服務(wù)器開通https
1、server 申請證書戏罢。向CA申請證書屋谭。,
2龟糕、CA頒發(fā)證書桐磁、私鑰。
3讲岁、tomcat里面設(shè)置證書和私鑰位置我擂。
http://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html
Diffie–Hellman算法。
除了用RSA算法交換PreMaster缓艳,還有一種方法Diffie–Hellman算法校摩。
client 和server協(xié)商一個(gè)明文。
client 使用私鑰C對明文加密得到密文C阶淘,server使用私鑰S對明文加密得到密文S衙吩。
交換密文C和密文S
client 使用私鑰C對密文S加密,server使用私鑰對密文C進(jìn)行加密溪窒。加密后的結(jié)果是一樣的坤塞。
client端結(jié)果:明文 --S加密-->密文S--C加密-->密文CS
server端結(jié)果:明文 --C加密-->密文C--S加密-->密文CS
需要注意的是加密算法要滿足一個(gè)條件,即更換密鑰加密順序不影響加密結(jié)果澈蚌。
refenrence:
http://www.codeceo.com/article/https-worker.html
https://help.aliyun.com/knowledge_list/42212.html?spm=5176.doc28548.6.557.xIxBud