使用Openssl構建私有CA

使用Openssl構建私有CA

Openssl是SSL的開源實現,是一種安全機密程序,主要用于提高遠程登錄訪問的安全性。也是目前加密算法所使用的工具之一,功能很強大。

    Openssl為網絡通信提供安全及數據完整性的一種安全協議,包括了主要的密碼算法、常用的密鑰和證書封裝管理功能(CA)以及SSL協議,并提供了豐富的應用程序供測試或其它目的使用,例如我們將會使用Openssl實現私有CA,并實現證書頒發。

OpenSSL:SSL的開源實現  

     libcrypto:通用加密庫,提供了各種加密函數  

     libssl:TLS/SSL協議的實現,基于會話的、實現了身份認證、數據機密性和會話完整性的TLS/SSL庫  

     openssl:多用途的命令行工具;能夠實現私有證書頒發機構;即在公司內部實現身份的驗證; 

     SSL:(Secure Socket Layer)安全套接字層,通過一種機制在互聯網上提供密鑰傳輸。其主要目標是保證兩個應用間通信數據的保密性和可靠性,可在服務器端和用戶端同時支持的一種加密算法。目前主流版本SSLV2、SSLV3

一、SSL提供以下功能:

數據的機密性:通過對稱加密算法實現數據的機密性。  

數據的完整性:通過單向加密算法保證數據的完整性。  

身份的安全驗證:提供數據發送者的身份。


二、加密類型及功能:

單向加密:提取數據特征碼,實現數據完整性驗證

對稱加密:數據加密,實現數據私密性

公鑰加密:使用對方公鑰加密,實現秘鑰交換;使用自己私鑰加密,實現身份驗證

三、SSL 會話流程

https會話.jpg   ssl.jpg


1.客戶端向服務端發起SSL會話信息,將自己支持的一套加密規則發送給網站。 

2.服務端從中選出一組加密算法與HASH算法與瀏覽器進行協商確認,并將自己的身份信息CA證書的發送給瀏覽器。

證書信息如圖所示

x509.jpg

3.驗證證書的合法性(頒發證書的機構是否合法,證書是否完整有無篡改、證書是否在CA吊銷庫中、證書中包含的網站地址是否與正在訪問的地址一致等);

4.如果證書不受信任,瀏覽器會彈出警告信息;等待操作人員確認是否繼續,繼續極為信任證書執行4步驟,如不信任終止會話;

5.如果證書受信任,或者是用戶接受了不受信的證書,瀏覽器會生成一串隨機數的密碼(這串密碼將作為后續對稱加密通訊的初始秘鑰使用);

6.使用協商好的HASH算法對隨機秘鑰進行單向加密計算出指紋信息,并使用客戶端私鑰對指紋信息進行加密,使用服務端公鑰信息對秘鑰和加密的指紋信息加密后發送給服務端;

7.服務端使用自己的私鑰將密文解開后獲取秘鑰,使用客戶端公鑰解密獲得秘鑰指紋信息并作對比并驗證客戶端身份;

8.之后所有的通信數據將由之前瀏覽器生成的隨機密碼并利用對稱加密算法進行加密,并按照協商定期更換秘鑰。

CA證書是一個加密會話建立信任的初始階段,互聯網上的知名網站的證書肯定是要想CA認證機構申請的,費用也是相當可觀的。而公司內部一些建立于CA之上的通訊完成可以通過Openssl來建立私有的CA服務。

四、使用Openssl建立私有CA

openssl 配置文件 /etc/pki/tls/openssl.cnf

dir             = /etc/pki/CA               # Where everything is kept 
certs           = $dir/certs                # Where the issued certs are kept
crl_dir         = $dir/crl                  # Where the issued crl are kept
database        = $dir/index.txt            # database index file.
#unique_subject = no                        # Set to 'no' to allow creation of
                                            # several ctificates with same subject.
new_certs_dir   = $dir/newcerts             # default place for new certs.

certificate     = $dir/cacert.pem           # The CA certificate
serial          = $dir/serial               # The current serial number
crlnumber       = $dir/crlnumber            # the current crl number
                                            # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem              # The current CRL
private_key     = $dir/private/cakey.pem    # The private key
RANDFILE        = $dir/private/.rand        # private random number file

  4.1初始化服務器工作環境    

[root@localhost ~]# touch /etc/pki/CA/{index.txit,serial,crlnumber} #創建證書發送數據庫、證書序列號、吊銷證書數字文件
[root@localhost ~]# echo 100001 > /etc/pki/CA/serial        #建立發放證書初始序列號
[root@localhost ~]# echo 000001 > /etc/pki/CA/crlnumber                 #鍵入吊銷證書初始序列號

4.2 創建秘鑰對及自認證證書

[root@localhost ~]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)   #創建私鑰;(umask 077;)改變umask并只對此子shell有效括號內的命令之行結束后即失效
Generating RSA private key, 2048 bit long modulus
...............+++
.........................................................................................+++
e is 65537 (0x10001)
[root@localhost ~]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
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) [XX]:cn                                  #定義證書所屬國家,兩個字母簡寫
State or Province Name (full name) []:shandong                        #定義證書所屬省份(州)
Locality Name (eg, city) [Default City]:dezhou                        #定義證書所屬城市
Organization Name (eg, company) [Default Company Ltd]:eway            #定義證書所屬組織、公司
Organizational Unit Name (eg, section) []:support                     #定義證書所屬部門
Common Name (eg, your name or your server's hostname) []:ca.eway.com  #定義使用此證書的主機名稱
Email Address []:zhuzw_1203@126.com                                   #定義管理員郵箱


###################################################
命令參數
req: 生成證書簽署請求
     -news: 新請求
     -key /path/to/keyfile: 指定私鑰文件
     -out /path/to/somefile: 指定生成證書位置
     -x509: 生成自簽署證書
     -days n: 有效天數

4.3 證書申請節點生成私鑰及簽名請求

#####生成私鑰
[root@localhost ~]# (umask 077; openssl genrsa -out /root/cekay.pam 2048)
Generating RSA private key, 2048 bit long modulus
............................................................+++
..............+++
e is 65537 (0x10001)
#####生成證書簽名請求
[root@localhost ~]# openssl req -new -key /root/cekay.pam -out /root/cakey.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) [XX]:cn                        #需要跟CA服務器保持一致             
State or Province Name (full name) []:shandong              #需要跟CA服務器保持一致
Locality Name (eg, city) [Default City]:dezhou              #需要跟CA服務器保持一致
Organization Name (eg, company) [Default Company Ltd]:eway  #需要跟CA服務器保持一致
Organizational Unit Name (eg, section) []:www
Common Name (eg, your name or your server's hostname) []:    
Email Address []:zhuzw_1203@126.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:                                   #證書秘鑰(可以不加密碼)
An optional company name []:                               #可選的公司名稱
#####將證書簽名請求發送給CA服務器
[root@localhost ~]# scp /root/cakey.csr mylinux@192.168.13.134:/home/mylinux
mylinux@192.168.13.134's password: 
cakey.csr                                          100% 1050     1.0KB/s   00:00

   4.4 CA服務器對此證書請求進行簽名并返回給此服務器

[root@localhost ~]# openssl ca -in /home/mylinux/cakey.csr -out /home/mylinux/cakey.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1048577 (0x100001)
        Validity
            Not Before: Oct  5 21:21:14 2015 GMT
            Not After : Oct  4 21:21:14 2016 GMT
        Subject:
            countryName               = cn
            stateOrProvinceName       = shandong
            organizationName          = eway
            organizationalUnitName    = www
            commonName                = www.eway.com
            emailAddress              = zhuzw_1203@126.com
        X509v3 extensions:
            X509v3 Basic Constraints: 
                CA:FALSE
            Netscape Comment: 
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier: 
                73:0E:C3:34:70:BE:AF:E4:4F:B6:86:5E:94:33:29:E8:84:8F:A6:2D
            X509v3 Authority Key Identifier: 
                keyid:B1:46:C8:1F:7F:05:63:B5:B5:6E:36:A9:CF:D4:5C:A2:B7:DF:D7:91

Certificate is to be certified until Oct  4 21:21:14 2016 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

#####將證書遠程復制給客戶機
[root@localhost ~]# scp /home/mylinux/cakey.crt root@192.168.13.3:/root/
root@192.168.13.3's password: 
cakey.crt                                      100% 4620     4.5KB/s   00:00

吊銷證書

如果你的私鑰泄露了,那么證書就不能使用了,需要去CA服務器申請吊銷此證書

#####獲取你證書的序列號和相關信息
[root@localhost ~]# openssl x509 -in /root/cakey.crt -noout  -serial  -subject
serial=100001
subject= /C=cn/ST=shandong/O=eway/OU=www/CN=
#####將此信息及相關的身份證明信息發送給CA服務管理員,管理員在核對信息無誤后對證書進項吊銷操作。隨后你需要重新申請證書。

#####CA服務吊銷證書操作
[root@localhost ~]# openssl ca -revoke /etc/pki/CA/newcerts/100001.pem     #證書吊銷是以序列名稱來實現的
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 100001.
Data Base Updated
[root@localhost ~]# openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl         #更新證書吊銷列表
Using configuration from /etc/pki/tls/openssl.cnf

使用Openssl構建私有CA國慶假期快樂~!

原創文章,作者:東郭先生,如若轉載,請注明出處:http://www.www58058.com/8576

(0)
東郭先生東郭先生
上一篇 2015-10-07
下一篇 2015-10-08

相關推薦

  • 運維自動化之系統安裝

    自動化安裝系統,cobbler的安裝使用

    Linux干貨 2018-01-15
  • Infobright高性能數據倉庫

    1.  概述         Infobright是一款基于獨特的專利知識網格技術的列式數據庫。Infobright簡單易用,快速安裝部署,使用中無需復雜操作,能大幅度減少管理工作;在應對50TB甚至更多數據量進行多并發復雜查詢時,更能夠顯示出令人驚嘆的速度。相比于MySQL,其查詢速度提升了數倍甚…

    Linux干貨 2015-04-05
  • 最近了解到的命令

    ssh:secure  shell shell  人機交互的語言查詢當前系統使用了哪個shell(接口程序) echo $SHELL 查詢當前系統已安裝的所有shell cat /etc/shells Shell提示符 whoami 顯示當前的登錄用戶名 hostname 顯示當前的主機名      pwd …

    Linux干貨 2017-07-13
  • N22-第2周作業

    1、Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示 cd、pwd、ls、alias、cat、more、less、tail、cut、wc、touch、mv、cp、rm pwd:用戶當前所在目錄 [xuc@localhost ~]$ pwd /home/xuc cd:切換目錄  cd  [/PATH…

    Linux干貨 2016-08-22
  • PHP運行模式

    PHP運行模式有4鐘: 1)cgi 通用網關接口(Common Gateway Interface))2) fast-cgi 常駐 (long-live) 型的 CGI3) cli  命令行運行   (Command Line Interface)4)web模塊模式 (apache等web服務器運行的模塊模式) 1.  CGI(…

    Linux干貨 2015-04-10
  • yum詳解及源碼包的編譯安裝

    yum的功能:     在我們使用rpm包安裝程序時,各個程序包之間可能存在非常嚴重的依賴關系,這就導致我們在安裝一個包的同時還需要安裝其他存在依賴關系的包,因此我們可以使用rpm包的前端管理工具yum,可通過yum所支持的文件共享機制來解決各個rpm包之間的依賴關系。 yum倉庫的配置文件:   …

    Linux干貨 2016-08-25
欧美性久久久久