Linux下如何頒發證書:學習使用openssl搭建一個CA
這兩天學習了openssl在LInux中的使用,openssl是一款開源的加密工具,在Linux環境下,我們能夠利用它來搭建一個CA來實現證書的發放,可以用於企業內部使用的加密工具。在介紹openssl之前,首先描述一下關於“身份認證+資料加密”的實現方法原理。
如何實現“身份驗證+資料加密”,請看下面的一張流程圖(自己畫得,比較簡陋)
整個加密過程:
傳送方: 計算資料特徵值----> 使用私鑰加密特徵值 ---> 隨機生成密碼對稱加密整個資料 ---> 使用接受方公鑰加密密碼
接收方: 使用私鑰解密密碼 ----> 解密整個資料 ----> 使用公鑰驗證身份 ----> 比較資料特徵值
但是存在一個問題,誰來管理公鑰,任何在網際網路上傳播的資料都不安全,更不用說傳遞公鑰,它如果被篡改,那就無法驗證身份,所以不可能由使用者自己頒發公鑰。
這個時候需要有一個具有公信力的中間機構來做這份工作,那就是CA,由此引發了兩個概念:
CA : 證書頒發機構
PKI : 公鑰基礎設施,公鑰基礎構架
證書: 裡面存放了使用者的各種資訊,最核心的部分就是公鑰
但是還有一個問題,誰來給CA頒發公鑰,解決方法是,CA自己給自己頒發公鑰。。。
下面是用openssl這個強大的工具,在linux下構建一個CA,來實現證書管理,我們用一個web伺服器端作為需要證書的客戶端
1.首先我們來給CA生成一個私鑰
切換到/etc/pki/CA/目錄,使用openssl命令給自己生成一個私鑰
- [[email protected] openssl]# cd /etc/pki/CA/
- [[email protected] CA]# ls
- private
- [[email protected] CA]# (umak 66;openssl genrsa 2046 > private/cakey.pem)
- -bash: umak: command not found
- Generating RSA private key, 2046 bit long modulus
- .............................+++
- ..+++
- e is 65537 (0x10001)
2. CA需要一個自簽證書,所以我們給它使用openssl命令生成一個自簽證書
- [[email protected] CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
- 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) [GB]:CN # 輸入你的各項資訊,國家 , 省或州,地區,公司,單位,域名,郵箱地址
- State or Province Name (full name) [Berkshire]:Henan
- Locality Name (eg, city) [Newbury]:Zhengzhou
- Organization Name (eg, company) [My Company Ltd]:LINUX
- Organizational Unit Name (eg, section) []:Tech
- Common Name (eg, your name or your server's hostname) []:www.rhce.com #需要注意的是,這個域名是FQDN(完全限定域名)
- Email Address []:[email protected]
- [[email protected] CA]# ls
- cacert.pem private
3.編輯CA配置檔案,它位於etc/pki/tls/openssl.cnf,它的作用是指定你的CA所在目錄,更改預設屬性值
- [[email protected] CA]# vim /etc/pki/tls/openssl.cnf
- [ CA_default ]
- dir = ../../CA # Where everything is kept **************CA路徑 ,修改為絕對路徑
- 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 fornew certs. ××××××××××x新生成的證書存放地 需要手動建立
- 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
- x509_extensions = usr_cert # The extentions to add to the cert
- # req_extensions = v3_req # The extensions to add to a certificate request
- #########修改證書CSR與自己的匹配
- [ req_distinguished_name ]
- countryName = Country Name (2 letter code)
- countryName_default = CN #我修改為CN和CA的自簽證書對應
- countryName_min = 2
- countryName_max = 2
- stateOrProvinceName = State or Province Name (full name)
- stateOrProvinceName_default = Henan #同上
- localityName = Locality Name (eg, city)
- localityName_default = Zhengzhou #同上
- 0.organizationName = Organization Name (eg, company)
- 0.organizationName_default = Tech #同上
4.建立CA的相關目錄和檔案,指定序列號起始數字,在上一步已經說明,它們在CA所在目錄建立
- [[email protected] ~]# cd /etc/pki/CA/
- [[email protected] CA]# mkdir certs crl newcerts
- [[email protected] CA]# ls
- cacert.pem certs crl newcerts private
- [[email protected] CA]# touch index.txt serial
- [[email protected] CA]# echo 01 > serial
5. 建立web伺服器的私鑰 ,因為是實驗,所有並不需要安裝web伺服器,你可以建立一個ssl目錄,我們假設它是一個web伺服器
- [[email protected] CA]# cd /etc/httpd/
- [[email protected] httpd]# mkdir ssl
- [[email protected] httpd]# cd ssl/
- [[email protected] ssl]# (umask 66;openssl genrsa 2048 > web.key)
- Generating RSA private key, 2048 bit long modulus
6. 客戶端(web伺服器)請求獲得證書,客戶端如果想申請獲得證書的話,需要建立一個申請證書,傳遞給CA
- [[email protected] ssl]# openssl req -new -key web.key -out web.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) [CN]:
- State or Province Name (full name) [Henan]:
- Locality Name (eg, city) [Zhengzhou]:
- Organization Name (eg, company) [RHCE]:
- Organizational Unit Name (eg, section) [Tech]:
- Common Name (eg, your name or your server's hostname) []:www.web.com
- Email Address []:[email protected]
- Please enter the following 'extra' attributes
- to be sent with your certificate request
- A challenge password []: # 請求證書需要在網路上傳遞,所以加密防止別人窺探,這裡留空因為我們只是實驗
- An optional company name []:
7. 在CA端給客戶端頒發證書,使用openssl命令
- [[email protected] ssl]# openssl ca -in web.csr -out web.crt # 這個命令執行後,會顯示請求證書裡的資訊
- Using configuration from /etc/pki/tls/openssl.cnf
- Check that the request matches the signature
- Signature ok
- Certificate Details:
- Serial Number: 1 (0x1)
- Validity
- Not Before: Aug 9 04:46:25 2011 GMT
- Not After : Aug 8 04:46:25 2012 GMT
- Subject:
- countryName = CN
- stateOrProvinceName = Henan
- organizationName = RHCE
- organizationalUnitName = Tech
- commonName = www.web.com
- emailAddress = [email protected]
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:FALSE
- Netscape Comment:
- OpenSSL Generated Certificate
- X509v3 Subject Key Identifier:
- B6:52:27:11:5B:BA:84:C8:56:4D:67:D7:B9:7A:CB:FE:45:CF:5A:02
- X509v3 Authority Key Identifier:
- keyid:5C:4A:A2:EB:DD:3F:BB:08:41:A2:02:3F:98:A4:59:8B:78:47:AF:4F
- Certificate is to be certified until Aug 8 04:46:25 2012 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
好了,看一下我們的證書把!就是那個.crt結尾的檔案
- [[email protected] ssl]# ls
- 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之前,首先描述一下關於“身份認證+資料加密”的實現方法原理。 如何
linux下apache+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.
Linux下MySQL/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
Linux下C編程學習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。
linux下GTK程式設計:顯示CPU使用率,記憶體使用率,網速。
StartOS 5.1版GNOME核心linux用了一段時間後,一直想視窗程式設計,QT最先搭建好,QT入門做了一個系統資訊,重灌系統後發現不能運行了,要安裝QT環境才能執行,於是想做一種低依賴的系統級程式設計,因為StartOS已經停止更新了,千辛萬苦第三次才成功搭建GTK環境,結合C語言對QT原
Linux下JDK 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檔案最後追加
Linux下redis安裝以及遠端訪問 搭建過程綜合整理
虛擬機器以及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
Linux下c的進一步學習
1.資料儲存區定義及其特點 1.1堆區 由malloc動態分配記憶體,free釋放的儲存在堆區,由new分配,delete釋放的儲存在自由儲存區,自由儲存區一般來講不僅包括堆區,還可能包括全域性儲存區的未分配部分。 1.2棧區 就是那些由編譯器在需要的時候分配,在不需要的時候自動清除的變數的
Linux下Apache安裝_學習記錄
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除錯的文件。前些天由於想