1. 程式人生 > >Linux下如何頒發證書:學習使用openssl搭建一個CA

Linux下如何頒發證書:學習使用openssl搭建一個CA

這兩天學習了openssl在LInux中的使用,openssl是一款開源的加密工具,在Linux環境下,我們能夠利用它來搭建一個CA來實現證書的發放,可以用於企業內部使用的加密工具。在介紹openssl之前,首先描述一下關於“身份認證+資料加密”的實現方法原理。

如何實現“身份驗證+資料加密”,請看下面的一張流程圖(自己畫得,比較簡陋)

整個加密過程:

傳送方: 計算資料特徵值----> 使用私鑰加密特徵值 ---> 隨機生成密碼對稱加密整個資料 ---> 使用接受方公鑰加密密碼
接收方: 使用私鑰解密密碼 ----> 解密整個資料 ----> 使用公鑰驗證身份 ----> 比較資料特徵值

但是存在一個問題,誰來管理公鑰,任何在網際網路上傳播的資料都不安全,更不用說傳遞公鑰,它如果被篡改,那就無法驗證身份,所以不可能由使用者自己頒發公鑰。

這個時候需要有一個具有公信力的中間機構來做這份工作,那就是CA,由此引發了兩個概念:

CA : 證書頒發機構

PKI : 公鑰基礎設施,公鑰基礎構架

證書: 裡面存放了使用者的各種資訊,最核心的部分就是公鑰

但是還有一個問題,誰來給CA頒發公鑰,解決方法是,CA自己給自己頒發公鑰。。。

下面是用openssl這個強大的工具,在linux下構建一個CA,來實現證書管理,我們用一個web伺服器端作為需要證書的客戶端

1.首先我們來給CA生成一個私鑰

切換到/etc/pki/CA/目錄,使用openssl命令給自己生成一個私鑰

  1. [[email protected] openssl]# cd /etc/pki/CA/  
  2. [[email protected] CA]# ls  
  3. private
  4. [[email protected] CA]# (umak 66;openssl genrsa 2046 > private/cakey.pem)  
  5. -bash: umak: command not found  
  6. Generating RSA private key, 2046 bit long modulus  
  7. .............................+++  
  8. ..+++  
  9. e is 65537 (0x10001)  

2. CA需要一個自簽證書,所以我們給它使用openssl命令生成一個自簽證書

  1. [[email protected] CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem  
  2. You are about to be asked to enter information that will be incorporated  
  3. into your certificate request.  
  4. What you are about to enter is what is called a Distinguished Name or a DN.  
  5. There are quite a few fields but you can leave some blank  
  6. For some fields there will be a default value,  
  7. If you enter '.', the field will be left blank.  
  8. -----  
  9. Country Name (2 letter code) [GB]:CN                                                           # 輸入你的各項資訊,國家 , 省或州,地區,公司,單位,域名,郵箱地址  
  10. State or Province Name (full name) [Berkshire]:Henan     
  11. Locality Name (eg, city) [Newbury]:Zhengzhou  
  12. Organization Name (eg, company) [My Company Ltd]:LINUX  
  13. Organizational Unit Name (eg, section) []:Tech  
  14. Common Name (eg, your name or your server's hostname) []:www.rhce.com   #需要注意的是,這個域名是FQDN(完全限定域名)  
  15. Email Address []:[email protected]  
  16. [[email protected] CA]# ls  
  17. cacert.pem  private

3.編輯CA配置檔案,它位於etc/pki/tls/openssl.cnf,它的作用是指定你的CA所在目錄,更改預設屬性值

  1. [[email protected] CA]# vim /etc/pki/tls/openssl.cnf  
  2. [ CA_default ]  
  3. dir             = ../../CA              # Where everything is kept      **************CA路徑 ,修改為絕對路徑  
  4. certs           = $dir/certs            # Where the issued certs are kept          ×××××××發給其他的人的證書  ,該目錄需要手動建立  
  5. crl_dir         = $dir/crl              # Where the issued crl are kept   ××××××證書吊銷列表  不屬於必須建立的目錄  
  6. database        = $dir/index.txt        # database index file.       *****************存放生成證書檔案索引  需要手動建立的檔案  
  7. #unique_subject = no                    # Set to 'no' to allow creation of    
  8.                                         # several ctificates with same subject.
  9. new_certs_dir   = $dir/newcerts         # default place fornew certs.   ××××××××××x新生成的證書存放地  需要手動建立                                                                                                      
  10. certificate     = $dir/cacert.pem       # The CA certificate  
  11. serial          = $dir/serial           # The current serial number               ××××××序列號,需要自己建每一個證書都有一個序列號需要自己建,並指定從幾開始  
  12. crlnumber       = $dir/crlnumber        # the current crl number  
  13.                                         # must be commented out to leave a V1 CRL
  14. crl             = $dir/crl.pem          # The current CRL  
  15. private_key     = $dir/private/cakey.pem# The private key  
  16. RANDFILE        = $dir/private/.rand    # private random number file  
  17. x509_extensions = usr_cert              # The extentions to add to the cert  
  18. # req_extensions = v3_req # The extensions to add to a certificate request
  19. #########修改證書CSR與自己的匹配
  20. [ req_distinguished_name ]  
  21. countryName                     = Country Name (2 letter code)  
  22. countryName_default             = CN                                                           #我修改為CN和CA的自簽證書對應  
  23. countryName_min                 = 2  
  24. countryName_max                 = 2  
  25. stateOrProvinceName             = State or Province Name (full name)  
  26. stateOrProvinceName_default     = Henan                                            #同上  
  27. localityName                    = Locality Name (eg, city)  
  28. localityName_default            = Zhengzhou                                              #同上  
  29. 0.organizationName              = Organization Name (eg, company)  
  30. 0.organizationName_default      = Tech                                                  #同上  

4.建立CA的相關目錄和檔案,指定序列號起始數字,在上一步已經說明,它們在CA所在目錄建立

  1. [[email protected] ~]# cd /etc/pki/CA/  
  2. [[email protected] CA]# mkdir certs crl newcerts  
  3. [[email protected] CA]# ls  
  4. cacert.pem  certs  crl  newcerts  private
  5. [[email protected] CA]# touch index.txt serial  
  6. [[email protected] CA]# echo 01 > serial  

5. 建立web伺服器的私鑰 ,因為是實驗,所有並不需要安裝web伺服器,你可以建立一個ssl目錄,我們假設它是一個web伺服器              

  1. [[email protected] CA]# cd /etc/httpd/  
  2. [[email protected] httpd]# mkdir ssl  
  3. [[email protected] httpd]# cd ssl/  
  4. [[email protected] ssl]# (umask 66;openssl genrsa 2048 > web.key)  
  5. Generating RSA private key, 2048 bit long modulus  

6. 客戶端(web伺服器)請求獲得證書,客戶端如果想申請獲得證書的話,需要建立一個申請證書,傳遞給CA

  1. [[email protected] ssl]# openssl req -new -key web.key -out web.csr  
  2. You are about to be asked to enter information that will be incorporated  
  3. into your certificate request.  
  4. What you are about to enter is what is called a Distinguished Name or a DN.  
  5. There are quite a few fields but you can leave some blank  
  6. For some fields there will be a default value,  
  7. If you enter '.', the field will be left blank.  
  8. -----  
  9. Country Name (2 letter code) [CN]:  
  10. State or Province Name (full name) [Henan]:  
  11. Locality Name (eg, city) [Zhengzhou]:  
  12. Organization Name (eg, company) [RHCE]:  
  13. Organizational Unit Name (eg, section) [Tech]:  
  14. Common Name (eg, your name or your server's hostname) []:www.web.com      
  15. Email Address []:[email protected]  
  16. Please enter the following 'extra' attributes  
  17. to be sent with your certificate request  
  18. A challenge password []:                               # 請求證書需要在網路上傳遞,所以加密防止別人窺探,這裡留空因為我們只是實驗  
  19. An optional company name []:  

7. 在CA端給客戶端頒發證書,使用openssl命令

  1. [[email protected] ssl]# openssl ca -in web.csr -out web.crt              # 這個命令執行後,會顯示請求證書裡的資訊  
  2. Using configuration from /etc/pki/tls/openssl.cnf  
  3. Check that the request matches the signature  
  4. Signature ok  
  5. Certificate Details:  
  6.         Serial Number: 1 (0x1)  
  7.         Validity  
  8.             Not Before: Aug  9 04:46:25 2011 GMT  
  9.             Not After : Aug  8 04:46:25 2012 GMT  
  10.         Subject:  
  11.             countryName               = CN  
  12.             stateOrProvinceName       = Henan  
  13.             organizationName          = RHCE  
  14.             organizationalUnitName    = Tech  
  15.             commonName                = www.web.com  
  16.             emailAddress              = [email protected]  
  17.         X509v3 extensions:  
  18.             X509v3 Basic Constraints:   
  19.                 CA:FALSE  
  20.             Netscape Comment:   
  21.                 OpenSSL Generated Certificate  
  22.             X509v3 Subject Key Identifier:   
  23.                 B6:52:27:11:5B:BA:84:C8:56:4D:67:D7:B9:7A:CB:FE:45:CF:5A:02  
  24.             X509v3 Authority Key Identifier:   
  25.                 keyid:5C:4A:A2:EB:DD:3F:BB:08:41:A2:02:3F:98:A4:59:8B:78:47:AF:4F  
  26. Certificate is to be certified until Aug  8 04:46:25 2012 GMT (365 days)  
  27. Sign the certificate? [y/n]:y                                                                                      # 是否認同這個請求的客戶端,並授予證書  
  28. 1 out of 1 certificate requests certified, commit? [y/n]y                         # 升級證書資料庫  
  29. Write out database with 1 new entries  
  30. Data Base Updated  

好了,看一下我們的證書把!就是那個.crt結尾的檔案

  1. [[email protected] ssl]# ls  
  2. server.key  web.crt  web.csr  web.key  


轉自:http://blog.csdn.net/deansrk/article/details/6680299

相關推薦

Linux如何頒發證書學習使用openssl搭建一個CA

這兩天學習了openssl在LInux中的使用,openssl是一款開源的加密工具,在Linux環境下,我們能夠利用它來搭建一個CA來實現證書的發放,可以用於企業內部使用的加密工具。在介紹openssl之前,首先描述一下關於“身份認證+資料加密”的實現方法原理。 如何

linuxapache+svn+ssl的環境搭建(申請免費的SSL證書)

1.安裝apache2和svn server $sudo apt-get install apache2 $sudo apt-get install subversion $sudo apt-get install libapache2-svn 2.建立版本庫 $sudo

Linux安全證書申請以及配置到Nginx

types .com rman fastcgi light brush inf inux toc wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.

LinuxMySQL/MariaDB Galera集群搭建過程【轉】

分支 指定 util -1 令行 第一個 否則 alt 常見 MariaDB介紹 MariaDB是開源社區維護的一個MySQL分支,由MySQL的創始人Michael Widenius主導開發,采用GPL授權許可證。 MariaDB的目的是完全兼容MySQL,包括API

Linux的指令tail

打開 span post 內容 gpo color 實時 獲取 定向 tail指令常用來查看服務器中的日誌信息。 有的時候,需要實時獲取日誌信息。 比如,我們向服務器發送了一個請求,此時日誌有更新,而我們又想實時看到尾部更新的內容。 這時候可以使用指令: tail -f x

LinuxC編程學習1---進程、線程

拷貝 工作 擁有 本地 存在 3.1 字節 布局 十個 工作中剛開始接觸Linux,基本上編程練手就從多線程Demo開始。首先由於對於進程、線程這些基本概念進行了簡單的認知。 1.程序的認識 程序:硬盤中的二進制文件   通常意義上就是我們電腦本地保存的一些文件。比如我電腦

Linux驅動模塊學習

14. 移除 return 加載 控制器 就是 偏移地址 模塊插入 出現 1.modutils中提供了相關的insmod,rmmod,modinfo工具2.modprobe在識別出目標模塊所依賴模塊後也是調用insmod.3.從外部看模塊只是普通可重定位的目標文件。可重定位

Red5一鍵安裝腳本(Linux&Win)一鍵搭建你的直播平臺

代碼托管 播放 有用 try -c serve 一鍵 目錄 all Red5一鍵部署script(Linux&Win):一鍵搭建你的直播平臺 看到bilibili,熊貓TV,鬥魚TV等直播平臺你是不是也很眼紅呢,這裏站長為大夥寫了一個Red5一鍵部署script。

linuxGTK程式設計顯示CPU使用率,記憶體使用率,網速。

StartOS 5.1版GNOME核心linux用了一段時間後,一直想視窗程式設計,QT最先搭建好,QT入門做了一個系統資訊,重灌系統後發現不能運行了,要安裝QT環境才能執行,於是想做一種低依賴的系統級程式設計,因為StartOS已經停止更新了,千辛萬苦第三次才成功搭建GTK環境,結合C語言對QT原

LinuxJDK Tomcat MySQL基本環境搭建

1. 安裝JDK 1.上傳jdk-7u45-linux-x64.tar.gz到Linux上 2.解壓jdk到/usr/local目錄 tar -zxvf jdk-7u45-linux-x64.tar.gz -C /usr/local/ 3.設定環境變數,在/etc/profile檔案最後追加

Linuxredis安裝以及遠端訪問 搭建過程綜合整理

虛擬機器以及linux安裝 VMware安裝,我安裝的版本是14.1.1.28517 虛擬機器以及linux安裝過程傳送門:點選開啟連結,虛擬機器簡簡單單的典型安裝就行 虛擬機器安裝後需要啟用,啟用碼傳送門:點選開啟連結 linux系統用的是centos7 linux系統安裝時候需要注

Red5一鍵安裝指令碼(Linux&Win)一鍵搭建你的直播平臺

Red5一鍵部署script(Linux&Win):一鍵搭建你的直播平臺 看到bilibili,熊貓TV,鬥魚TV等直播平臺你是不是也很眼紅呢,這裡站長為大夥寫了一個Red5一鍵部署script。 Red5供給基於Flash的流媒體服務的一款基於Java的開源流媒體伺服器。它由Java言語編寫,使

linux證書安裝

linux下的證書安裝說明 拷貝證書到/usr/share/ca-certificates/下 cp CA.crt /usr/share/ca-certificates/x-net.crt 修改許可權 chmod a+r /usr/share/ca-certif

Linuxc的進一步學習

1.資料儲存區定義及其特點 1.1堆區 由malloc動態分配記憶體,free釋放的儲存在堆區,由new分配,delete釋放的儲存在自由儲存區,自由儲存區一般來講不僅包括堆區,還可能包括全域性儲存區的未分配部分。 1.2棧區 就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的

LinuxApache安裝_學習記錄

Linux下Apache安裝_學習記錄 Centos 7 版本 一、Yum安裝Apache的實驗步驟: 1. Yum install httpd 2. 編輯/etc/httpd/conf/httpd.conf檔案,編輯內容如下: 刪除#ServerName

Linux軟體安裝Openblas安裝

一、apt安裝 sudo apt-get install libopenblas-dev 二、手動從source安裝 1. 下載OpenBLAS並編譯 1 git clone https://github.com/xianyi/OpenBLAS.git 2 cd O

Linux軟體安裝libstdc++.so.6: version `CXXABI_1.3.9' not found

libstdc++.so.6在系統中存在於 /usr/lib/libstdc++.so.6  或者 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 導致這個問題的出現可能是你在別的庫中(例如anaconda)也存在該動態庫檔案 1、檢

Linux平臺swift語言開發學習環境搭建

摘要  介紹在Ubuntu平臺搭建Swift開發環境; 介紹Swift指令碼解析器swift的使用; 介紹Swift編譯器swiftc的使用; 1.序言 這兩天一直忙,沒來得及記錄東西,週三12月4日凌晨1點多看到蘋果正式開源了Swift,國外各大媒體資訊動作超級快

Linux的 ARM裸機除錯環境搭建(GDB + JLink)

說明:我也是除錯u-boot,在win下OK了,基於這裡,然後為了完全在linux下便有了下邊轉載的內容。下文會對照我自己的操作進行結果補充!感覺補充的多於轉載的就改為原創了,讓更多人看到!     一直想擺脫windows環境,在純linux下進行arm裸機開發,

(轉載)純Linux的 ARM裸機除錯環境搭建(GDB + JLink)

一直想擺脫windows環境,在純linux下進行arm裸機開發,但是由於一直不知道JLink如何在linux下執行和配置,一直無法進行下去。以前都是windows+AXD除錯。包括本人用的FL2440開發板和JLink偵錯程式也沒有提供在linux除錯的文件。前些天由於想