1. 程式人生 > 實用技巧 >Openssl安全與認證

Openssl安全與認證

SSL :secure socketslayer 安全的套接字層。這是網井公司為了給httpd傳輸協議加密在應用層和傳輸層加了一層庫,實現傳輸加密用的,這個庫能夠在寫程式的時候,呼叫這個庫,完成加密解密功能,能幫著完成祕鑰分發功能;如果不呼叫也可以正常的時候只使用httpd不進行加密,所以這個是公用的一個庫。

http協議呼叫了SSL,則成為https。但是httpd和https在實現機制上差別非常大

通訊安全的目標:

保密性:確保任何無關的第三方看到confidentiality

完整性:通訊雙方在通訊過程中,整個報文不能產生資訊丟失,一旦丟失要讓接收人知道 integrity (分系統完整和通訊完整)

可用性:加密後,讓對方能夠看到看懂 availablity

***型別:

威脅保密性的***:竊聽、通訊量分析

威脅完整性的***:更改、偽裝、重放、否認

威脅可用性的***:拒絕服務(DoS)

解決方案

技術:加密和解密

服務(用來抵禦***的服務,為了實現上述安全目標而特地設計的服務)

加密和解密:

傳統加密方法:

替代加密演算法

置換加密方法

現代加密方法:

現代塊加密演算法

服務:

認證機制

訪問控制機制

祕鑰演算法和協議(用來實現祕鑰的演算法和相關協議,怎麼交換祕鑰)

對稱加密 用於資料加密(保密性)

非對稱加密(公鑰加密),用於身份認證、祕鑰交換,(但是資料加密可有不怎麼用,比對稱加密慢3個數量級)

單項加密 保證資料的完整性,一般是對資料求特徵碼

認證協議 祕鑰交換協議常用DH,rsa

linux在系統上面為了實現安全有兩個:OpenSSL(ssl) ,GPG(pgp)

OpenSSL 有三部分組成:

提供加密解密庫,libencrpt,專用於加密解密

實現SSL安全通訊機制的庫,libssl

openssl多用途命令列工具

加密的演算法和協議:

對稱加密

DES:date encryption standard,2003年就被破解

3DES:triple DES(3輪DES加密機制)以前的1000倍,

AES:advanced encryption standard 高階加密標準,安全程度很高(支援128bits,192位,256位,384位)

Blowfish

Twofish

IDEA

RC6

CAST5

對稱加密特性:

1.加密和解密使用同一個祕鑰,加密和解密演算法可能不同

2.將原始資料分割為固定大小的塊,逐個加密

對稱加密的缺陷:

1.祕鑰過多(伺服器端與每個使用者都是用一個專用的祕鑰,使用者一多,祕鑰也就多了,祕鑰相同,資料可被檢視)

2.祕鑰分發困難(祕鑰交換演算法)

3.無法實現資料來源確認

公鑰加密:祕鑰分為公鑰和私鑰(加密工具是用公鑰,解密工具使用私鑰)

公鑰:公開給所有人,pubkey,公鑰是從私鑰中提取出來的

私鑰:通過工具建立,使用者自己留存,必須保證其私密性:secret key

公鑰加密的演算法:

RSA即能簽名又能加密

DSADigital Signature Standard 只能用於簽名,不能用於加密解密 有時又叫DSS數字簽名標準

ELGamal數字簽名演算法

公鑰加密特點:

用公鑰加密的資料只能使用與之配對的私鑰解密;用私鑰加密的資料只有與之配對的公鑰才能解密

公鑰加密用途:

數字簽名 主要讓接受方確認傳送方的身份

祕鑰交換 傳送方用對方的公鑰加密一個對稱祕鑰,併發送給對方,以實現祕鑰交換

資料加密(這個功能比較少用)

公鑰加密的缺點:

不適合加密大資料,只適合小資料,(公鑰解密耗費的時間比對稱加密要費時500倍)

公鑰加密資料的流程:

1.使用者通過伺服器給的公鑰加密資料,傳送給伺服器;

2.伺服器收到加密的資料後,用自己的私鑰解密,解密成功則予以響應;

3.伺服器通過單項加密使用者請求的資料求出特徵碼(這裡使用了對稱加密)

用自己的私鑰加密這個特徵碼,形成簽名

伺服器把(資料和數字簽名)通過臨時生成的祕鑰,進行對稱加密

之後用客戶端的公鑰生加密這個祕鑰,並附加到這段資料加密後的後面,

4.使用者收到資料後,先用自己的私鑰解密“附屬在最後面的(對稱加密的祕鑰)”,解密成功則是自己的,這個過程就是祕鑰交換,這個時候客戶端得到臨時加密時的祕鑰口令

5.之後客戶端拿著祕鑰口令解密(資料和數字簽名)外面的對稱加密層,解密成功說明是伺服器傳送的檔案(也是自己請求的資料),完成保密性

6.之後客戶端還要通過相同的加密演算法單項加密資料生成一個特徵碼,這個特徵碼如果根伺服器傳送過來的解密後的特徵碼相同,則證明資料沒有被篡改過,驗證資料完整性成功,資料傳輸完成,完成完整性

wKiom1d4nofSmf2vAAB3bGAM_nE505.png-wh_50

wKiom1d4nzjxaTB_AABYhn8ofAk726.png-wh_50

通過這種方式,完成了完整性和保密性,同時完成了身份驗證

不足,因為有的時候客戶端可伺服器端從來沒交流過,需要互傳公鑰檔案,但是這個時候可能會出現中間人,模擬兩段通訊,對著伺服器端說我是客戶端,對著客戶端說我是伺服器端,這樣就不安全,這個傢伙成了中間代理人,所有資料都要經過它,甚至它都可以進行修改,為了解決這個問題出現了CA

CA:為了保證通訊雙方都能口可靠的拿到對方的公鑰,一種可靠的機制。

把公鑰傳送給CA機構,CA機構處理後給服務端,服務端把證書傳送給客戶端,並繼續用自己的私鑰加密資料後傳輸

在使用者與服務之間通訊,是怎樣利用CA工作的:

客戶端在接受資料前,首先拿到CA頒發機構的公鑰:

之後用這個CA公鑰解密伺服器證書的數字簽名,能解密說明證書來源可靠;

用同樣的單向加密去計算資料得出特徵碼,之後與解密證書數字簽名得到的附加的特徵碼比較,一樣則證書完整性可靠;

之後檢查證書的有效期限

驗證要通訊的物件的名字是否與證書一致

檢查證書是否已經被吊銷,沒有吊銷才能使用

CA把自己的公鑰要提請給每一個人,CA先給自己發證,包含了CA自己資訊和公鑰,服務端只有拿到CA的證書才能夠解密CA頒發給伺服器證書,驗證資訊是否正確,驗證證書是否正常

一個第三段冒充伺服器端去向CA申請伺服器端,怎麼辦?

一般證書辦法機構會進行嚴格稽核,這一塊兒不太能成為問題

怎麼能夠可靠獲得CA的公鑰證書(用這個去解密CA頒發的公鑰證書)

CA要本地交易,很少通過網路傳輸

那需要CA認證的這麼多,怎麼才能一一的去頒發呢?

首先有根CA,之後關聯眾多CA證書頒發機構公司,且CA的信任是可以傳遞的,且全球CA機構是有限的,且存在從屬關係

CA給了微軟一份,作業系統裡面自帶CA證書,且證書可信,(盜版除外)

不過證書想要偽裝是非常難的

Linux上面是要自己手動載入CA的

如果私鑰丟失,要向CA機構申請吊銷證書,減少危害

單向加密

只能加密,不能解密,提取資料指紋(提取特徵碼)

特性:定長輸出,雪崩效應

功能:資料完成性校驗

演算法:

md5 : message digest 5 128bits

sha1 : secure hash algorithm1 160bits 定長輸出

sha224, sha256, sha512

祕鑰交換: (和單項加密相關)

IKEinternet key exchange 網際網路祕鑰交換

常見實現方式(兩種):

公鑰加密

DH演算法 (deffie-hellman) ECDH(橢圓曲線DH) ECDHE(臨時橢圓曲線DH)

一般更傾向於使用DH,原因:使用公鑰加密是在網上要傳輸密碼的,雖然加密了,但是仍可以被暴力破解;而DH演算法不用讓密碼在網際網路上傳送,能夠更加安全。

vDH:

主機A和B通訊

1、兩個主機進行協商

A:a,p協商生成公開的整數a,大素數p

B: a,p

2、兩主機各自根據數進行計算,並交換

A: 生成隱私資料:x (x<p),計算得出a^x%p(取模),傳送給B

B: 生成隱私資料:y, (y<p) 計算得出a^y%p(取模),傳送給A

3、解密

A:計算得出(a^y%p)^x = a^xy%p,生成為金鑰

B:計算得出(a^x%p)^y = a^xy%p, 生成為金鑰

在這個過程中其他使用者可以看到,p,a,也能夠看到取模後的值,但是這個過程反算x或y非常困難,從而達到加密目的

上面的圖我們雖然說是非對稱加密的流程,但是我們可以看的出,圖中的流程包含了4個加密的組合才完成了安全的資料傳輸,而在這個過程最重要的過程就是CA的認證過程,那下面我們就來搭建一下資料庫

PKI:public keyinfrastructure 公鑰基礎設施

簽發機構:CA

註冊機構:RA

證書吊銷列表:CRL

證書存取庫:這裡是公鑰存取的位置,任何人都可以下載

以上幾個元件是維護CA認證系統正常執行的重要元件

數字證書:

最常用的數字證書:x509v3目前比較通行的版本 ,(這是國際標準組織定義的)v3是目前用的比較多的

證書格式的版本號

序列號 (已經發了多少個)

簽名演算法

發行者名稱 (證書頒發者CA自己的資訊,CA組織的名稱,地址等

有效期

主體名稱 持有者的名稱人或者機器名稱,持有者的名稱

在網際網路訪問時,https://www.zou.com/ 這個路徑名稱和伺服器證書持有者的名稱要保持一致,否則證書不可信

主體公鑰 持有者的公鑰(持有者把自己的公鑰傳送給CA機構製作的,這個位置就是放的傳送過來的公鑰)

發行者的唯一標識 CA的id

主體的唯一標識 持有者的id

擴充套件資訊

證書的基本約束

使用策略

金鑰的使用限制

發行者的簽名 CA數字簽名(首先CA機構會把上面的所有資訊進行單向加密的出特徵碼,之後會拿CA自己的私鑰加密剛才單向加密的特徵碼,從而形成數字簽名並附加在後面,用來生成發行者的簽名)

基於SSL的通訊:

SSL握手所做的的工作(主要有三步):

客戶端向服務氣短索要並驗證證書

雙方協商生成“會話金鑰”

雙方採用“會話金鑰”進行加密通訊

SSL handshake Protocol 的工作流程(分為4個階段)

第一階段:clientHello

客戶端與對方傳送Hello,傳送隨機誰,傳送加密請求,向伺服器傳送自己所支援的協議版本,比如tls1.2

客戶端生成一個隨機數,稍後用互生成“會話祕鑰”

客戶端說明自己支援的加密演算法,比如AES、RSA

客戶端說名支援的壓縮演算法

第二階段:serverHello

伺服器開始迴應,也傳送hello,與隨機數

伺服器確認使用的加密通訊協議版本,比如tls1.2,如果伺服器端不支援客戶端的協議版本,則byebye,斷開

伺服器端生成一個隨機數,稍後用於生成“會話祕鑰”

伺服器傳送自己的證書

第三階段:

客戶端驗證伺服器端證書,確認無誤後取出其公鑰 (兩端互相發證書,並對兩端進行身份驗證是理論驗證,(初加密狗,網銀驗證外))

傳送以下資訊給服務端:

一個隨機數,用於加密 (這些隨機數來來回回,混合在一起就成了沒有規律的隨機數了)

編碼變更通知,隨後資訊都將用商定的演算法加密和祕鑰傳送

客戶端握手結束通知

第四階段:

收到客戶端發來的第二個隨機數 (在會話中總共是第三個),計算生成本次會話所用到的“會話祕鑰”

向客戶端傳送如下資訊:

編碼變更通知,隨後傳送的資訊都是通過協商的加密方法和祕鑰傳送

伺服器端握手結束通知

wKioL1d4oI-R_m0dAADA9au5iZI046.png-wh_50


openssl 命令

子命令分為3類:

標準命令

訊息摘要命令(dgest子命令)

加密命令(enc子命令)

[[email protected] ~]# openssl version

OpenSSL 1.0.1e-fips 11 Feb 2013 版本號,現在最新的官網應該是1.1

[[email protected] ~]# openssl ? 後面給一個錯誤的引數,之後會顯示幫助資訊,(某人沒有-h選項)

openssl:Error: '?' is an invalid command.

Standard commands

ca rand enc dgest genrsa gendsaversion x509

..........省略

Message Digest commands訊息摘要命令 (see the `dgst' command for more details) 後面為dest支援的演算法

md2 md4 md5 rmd160

sha sha1

Cipher commands 加密命令 (see the `enc' command for more details) 下面顯示的是enc所支援的演算法

aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb

aes-256-cbc aes-256-ecb base64 bf ......省略 zlib


標準命令使用比較多的:

enc 和加密相關

caca相關

req生成證書籤署請求的

genrsa生成rsa演算法祕鑰對

使用openssl完成對稱加密:

工具:openssl enc gpg

支援演算法:3des aes twofish blowfish

檢視使用enc幫助資訊:man enc

-e 加密

-des3這裡是按照des3演算法加密 (使用什麼演算法可以在enc下面的子命令去檢視,演算法有很多)

-d解密

-a使用base64位編碼格式(如果不編碼則使用二進位制格式的編碼)

-salt加些鹽

-in FILE_NAME 加密這個指定的檔案

-out file_Name 加密後文件的名字

[[email protected] mnt]# cp /etc/fstab .

[[email protected] mnt]#openssl enc -e -des3 -a -salt -in fstab -out fstab.cipher加密

enter des-ede3-cbc encryption password: 輸入加密密碼

Verifying - enter des-ede3-cbc encryption password: 再次輸入加密密碼

[[email protected] mnt]# ls

fstab fstab.cipher

[[email protected] mnt]# cat fstab.cipher

U2FsdGVkX1+LdtZGW/Raaa+eNHYzuugjGQvBsIXe3BwSDs27DeX67GeXFn0rskjA

66gruhac5fkEwC8mqTgL5PbGEMi292ofztjDtWiY18yr6aEPl/6NB8adwPSNPdO7

NApgZlYIVs+/V/7Isx0+La+zGf2kDC5S5SEY5arK000EtslcDrEpebBHcmqGKGAJ

jVPDqTLcQbU2z3p/yrVm9tj9Or7Ud7HhQOcTWj6WqhHsU0oRKh4zyqSbJvNWyG6t

LOw0gd/+qbEofF95SfC5WDtxi6Z4uTqbZcEwjSCFIGd/tBNRe9Ob25Ix2FAVIbBu

z38fE3UFnypQ7g/9ZIuo85ejdzY+tuJS7qTVrjE9hPS4JIU5InGOFBpf0dfIyNxq

LeHlzQan4f2Ah9QCt7orCSzB1aDHkm/wni6IgKMKx55RXp+sBhEs2UL2wav6KHlM

EU1F+ABuqiQCE95gDq/HsLgceKi+TbaEDlcvq1VHk/I=

[[email protected] mnt]# openssl enc -d -des3 -a -salt -in fstab.cipher -out fstab.plain 解密

enter des-ede3-cbc decryption password: 輸入解密密碼

[[email protected] mnt]# ls

fstab fstab.cipher fstab.plain

[[email protected] mnt]# cat fstab.plain

#

# /etc/fstab

# Created by anaconda on Wed Jun 15 13:41:54 2016 .....省略


openssl完成單向加密:

工具: openssl dgst gpg(很少使用) (也可以使用md5sum Fielname 求特徵碼)

用法:使用dest子命令:

[[email protected] mnt]# md5sum fstab

3234370d9b20a490e35c98222a535133 fstab

[[email protected] mnt]#openssl dgst -md5 fstab

MD5(fstab)=3234370d9b20a490e35c98222a535133 使用相同的演算法,結果應該相同

openssl生成使用者密碼

工具:passwd openssl passwd

獲取幫助資訊:whatis passwd --> man sslpasswd

使用格式:

-1 使用md5加密 (這裡為數字1,不是字母l

-salt SALT_STR 加鹽,後面跟上鹽的字串,最多8

[[email protected] mnt]# openssl passwd -1 -salt 12345678

Password:

$1$12345678$tRy4cXc3kmcfRZVj4iFXr/

[[email protected] mnt]# openssl passwd -1 -salt 12345678

Password:

$1$12345678$tRy4cXc3kmcfRZVj4iFXr/ 單向加密,鹽不變,輸入的密碼不變,最後結果一定一樣

[[email protected] mnt]# openssl passwd -1 -salt 12345670

Password: 雪崩效應

$1$12345670$7DdNL8JzTsaXAqPxVDm.W. 當把鹽改變了,即使密碼還是一樣,但結果大不一樣

openssl生成隨機數:

工具:openssl rand

獲取幫助資訊:man sslrand

格式:

-bash64使用bash64編碼

-hex 16進位制數字編碼

[[email protected] mnt]# openssl rand -base64 8

X0PlMi7A/XI=

[[email protected] mnt]# openssl rand -base64 9

6JqhqdlqhWHu

[[email protected] mnt]# openssl rand -hex 5使用16進位制編碼,你會發現5位元組會有10個隨機數

15970a4de5

下面是隨機數結合密碼使用,生成密碼:

[[email protected] mnt]# openssl passwd -1 -salt $(openssl rand -hex 4)

Password:

$1$64939ce7$XjTc5WGxHP.4VkD8MFt4o.

[[email protected] mnt]# openssl passwd -1 -salt $(openssl rand -hex 4)

Password: 之後我們會發現即使我們輸入密碼相同,隨機數絕對不相同,生成不同結果

$1$7c111a52$E4rN6Ut/nTGNetpZEQ7Ti.

openssl實現公鑰加密:

三種功能:

數字加密

支援演算法:RSA ELGamal

工具:openssl rsautl gpg

數字簽名

支援演算法:RSA DSA ELGamal

工具: openssl rsautl gpg

祕鑰交換

支援演算法: DH

生成祕鑰對: openssl genrsa 位數只能是512,1024,2048,4096

這裡要使用到()利用子shell環境

[[email protected] mnt]# openssl genrsa 1024

Generating RSA private key, 1024 bit long modulus

........................................................................................................++++++

e is 65537 (0x10001)

-----BEGIN RSA PRIVATE KEY----- 明顯可以看的出這是生成的私鑰

MIICXQI........中間省略.........Z

-----END RSA PRIVATE KEY-----

但是我們一般都是要把私鑰儲存到檔案當中,這裡有兩種方法(當然這兩種還要結合別的)

1.通過重定向

[[email protected] mnt]# openssl genrsa 1024 > /tmp/mykey.private

Generating RSA private key, 1024 bit long modulus

................++++++

e is 65537 (0x10001)

2.通過-out選項

[[email protected] mnt]# openssl genrsa -out /tmp/mykey2.private 1024

Generating RSA private key, 1024 bit long modulus

...........................................++++++

e is 65537 (0x10001)、

但是上面的兩個命令執行之後,要對這個私鑰檔案進行相應的許可權修改,要修改成600

所以我們這裡最終使用的命令是:

[[email protected] tmp]# (umask 077; openssl genrsa -out /tmp/mykey3.private 4096)

Generating RSA private key, 4096 bit long modulus

.....................................................................++ 在小括號裡面用分號分割兩條命令,形成子shellumask只對小括號內環境有影響,這樣創建出來的檔案為666-077就只能是600了,許可權沒問題了,結合上面的命令就可以創建出祕鑰檔案了,這裡還要提醒的是,這裡僅為實驗,如果實際操作的話,祕鑰檔案儘量放到別的位置,如root家目錄下

e is 65537 (0x10001)

從私鑰中提煉出公鑰:

openssl rsa

-in /path/to/FILE_name 從哪個私鑰檔案中提取公鑰

-pubout把公鑰提出來

-out file_name 把公鑰檔案儲存在什麼位置的什麼檔案

[[email protected] tmp]# openssl rsa -in /tmp/mykey.private -pubout

writing RSA key

-----BEGIN PUBLIC KEY-----

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3oUfzpg9U5azFbabYzX47MWjT

oy6SwHVpF1Dcnb/9V0u20al+4bNMcmVxxYHZB+9ocf2mBRGqo2RILOp+P7pYNUB6

gmE/5WTFellgJNkhVSDsGF08uExCJgILwwMF6PTww7Y3NIA1CdIjkT8nwLFr9474

Rvpg9nIyzI3CLTUFowIDAQAB

-----END PUBLIC KEY-----


linux 系統上面的隨機數生成器

/dev/random: 僅從熵池返回隨機數,隨機數用盡,則停在拿不動,阻塞

/dev/urandom:從熵池返回隨機數,隨機數用盡,則利用軟體生成偽隨機數,非阻塞

偽隨機數不安全

熵池是在記憶體中存在的一段空間,在這個空間記憶體儲了大量的隨機數字,但是剛啟動為空

熵池隨機數的來源:

各種硬碟IO中斷時間間隔;

鍵盤IO中斷時間間隔(兩次鍵盤擊鍵的時間間隔,當做隨機數放到熵池中)

熵池中的隨機數使用的時候是在裡面剪下,所以熵池中的隨機數是有可能耗盡的;一旦耗盡,取隨機數的程序就會等待哪裡,直到隨機數夠用的時候才能夠結束,這也就是阻塞的情況了,給你的感覺就是卡在那裡,你要敲鍵盤,移動滑鼠才可以結束阻塞(或者你也可以拷貝檔案,產生隨機磁碟IO)

生成隨機數的另一個方法:

~】# tr -dc A-Za-z0-9_ </dev/urandom | head -c 20 | xargs

通過熵池裡面的隨機數,取出前20個位元組,之後通過xargs輸出,我們就有了20位的隨機數

CA:

公信CA,要花錢;私有CA(企業組織自己使用)

建立私有CA:

openssl(自己企業或者測試使用的CA)

openCA(大型,銀行自檢的CA)

CA搭建:

建立私有CA

yum install openssl

rpm -ql openssl-libs

配置檔案是在 /etc/pki/tls/openssl.cnf

自建私有CA後,申請CA認證的機器必須與根是同一個機構,國家,省,組織,是要和根伺服器的設定一致的

注:這裡CA伺服器 和 web伺服器

第一步:自建CA,生成自簽證書

(說明一下,首先你要自己建立一個CA伺服器,然後再為web伺服器生成伺服器)

cd /etc/pki/CA

生成私鑰CA伺服器自己的私鑰,準備給自己做個根證書

[[email protected] CA]# (umask 077;openssl genrsa 2048 > private/cakey.pem)

Generating RSA private key, 2048 bit long modulus

...............................+++

e is 65537 (0x10001)

cakey.pemCA服務的自己的私鑰

##因為這裡是建立私有CA同一個機構,國家,省,組織 ,所以為了後續給自己簽證方便,這裡需要修改

vim /etc/pki/tls/openssl.cnf

[ CA_default ]

dir = /etc/pki/CA # CA的工作目錄

certs = $dir/certs # cert證書存放的位置(已經簽發的證書存放位置)

crl_dir = $dir/crl # crl吊銷證書的存放列表

database = $dir/index.txt # 資料庫存放各種頒發證書的索引,這個檔案要自己建立

new_certs_dir = $dir/newcerts # default place for new certs.

certificate = $dir/cacert.pem # CA的自簽證書

serial = $dir/serial # 指明當前序列號碼,第一次為1,下一次自動為2,用來為當前每一個證書提供序列號

private_key = $dir/private/cakey.pem # CA自己的私鑰

country Name_default = CN

StateOrprovinceName_default = Beijing

LocatityName_default = Shangdi

0.organizationName_default = M19

organizationUnitName = Jishu

生成根自簽證書

[[email protected] private]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -days 3665 -out/etc/pki/CA/cacert.pem

注:根CA的自簽證書要放到/etc/pki/CA目錄下,這是配置檔案裡面預設指定的

這裡很多保持預設即可,因為已經在配置檔案裡指定了預設值了

Common Name (eg, your name or your server's hostname) []:yuan.zouzhiyuan.com

Email Address []:

cacert.pem就是根證書,理論上和權威證書一樣

這裡需要說明的一點就是在hostname的位置要寫上主機名,如果是對外伺服器的話那就有必要寫上域名相對應的主機名

把一開始/etc/pki/tls/openssl.cnf 配置檔案裡面定義的部分指明的檔案或目錄都要建立完畢

~# mkdir -pv /etc/pki/CA/{certs,crl,newcerts}

~# touch /etc/pki/CA/{serial,index.txt}

~# echo 001 > /etc/pki/CA/serial

對於serial檔案,要給定第一個證書編碼的格式,後續的按照這個格式走,所以需要首訂指定一下


第二步:利用這個CA伺服器建立一個證書然後給web伺服器作為證書使用了,

先在web伺服器生成一個證書,注意的是在域名時必須要填寫web利用的域名,,然後把這個證書傳送給CA伺服器簽發一下,再讓CA把簽發好的web證書傳送給web伺服器,就可以了)

((cd /etc/httpd/conf 這個目錄預設應該是/etc/pki/CA/privite ,但是因為是打算給web伺服器做,方便管理就剛到相應位置了

mkdir ssl 方便管理建立的目錄 ------- > cd ssl/

(umask 077; openssl genrsa 2048 > httpd.key) web伺服器自己生成的私鑰))

web伺服器端生成自己的私鑰並生成證書請求

[[email protected] ~]# cd /etc/pki/CA/private/

[[email protected] private]# ls

[[email protected] private]# (umask 077;openssl genrsa 4096 > http.key)

Generating RSA private key, 4096 bit long modulus

..............++

e is 65537 (0x10001)

[[email protected] private]# openssl req -new -key http.key -out httpd.csr

You are about to be asked to enter information that will be incorporated

-----

Country Name (2 letter code) [XX]:CN

State or Province Name (full name) []:Beijing

Locality Name (eg, city) [Default City]:Shangdi

Organization Name (eg, company) [Default Company Ltd]:M19 要與證書CA一致

Organizational Unit Name (eg, section) []:haizeiwang

Common Name (eg, your name or your server's hostname) []:zou.zouzhiyuan.com

如果是web的證書生成的時候一定要寫好自己的主機與域名如www.6k6.cc,當然這只是假設,你在這寫的一般都是hostname,如果沒有hostname自己要先設定好hostname

Email Address []: [email protected]

Please enter the following 'extra' attributes to be sent with your certificate request

A challenge password []: 證書密碼,這裡測試可以保持為空

An optional company name []: 保持回車即可

這樣就是生成web伺服器的httpd.csr,這就是證書請求

把生成的證書請求傳送給CA伺服器 (實際中可能是CA伺服器過來人拿走)

[[email protected] private]# scp httpd.csr [email protected]:/etc/pki/CA/private/

httpd.csr 100% 1712 1.7KB/s 00:00

CA伺服器端: 收到web伺服器端傳送來的http.csr,把這個給他簽了(現在要準備好為別人簽證的基礎環境了)

[[email protected] private]# pwd

/etc/pki/CA/private

[[email protected] private]# openssl ca -in httpd.csr -out /etc/pki/CA/certs/http.crt -days 365

http.crt是最後的web證書

[[email protected] certs]# pwd

/etc/pki/CA/certs

CA伺服器把簽發的證書傳送給web端(實際為CA機構派人送證書到web公司)

[[email protected] certs]# scp /etc/pki/CA/certs/http.crt [email protected]:/etc/pki/CA/certs/

[email protected]'s password:

http.crt 100% 5971 5.8KB/s 00:00




轉載於:https://blog.51cto.com/941012521/1795279