OpenSSL及證書服務

OpenSSL及證書服務

1.1 問題

本案例要求熟悉OpenSSL工具的基本使用,完成如下任務操做:html

  1. 使用OpenSSL加密/解密文件
  2. 搭建企業自有的CA服務器,爲頒發數字證書提供基礎環境

1.2 方案

使用兩臺RHEL7虛擬機,其中svr7做爲CA數字證書服務器,而pc207做爲測試用客戶機。算法

1.3 步驟

實現此案例須要按照以下步驟進行。vim

步驟一:使用OpenSSL加密/解密文件安全

1)加密文件服務器

建立一個明文的文本文件f1.txt,使用openssl進行加密,選用des3加密算法,輸出的加密文件爲f1.txt.enc 。併發

  1. [root@svr7 ~]# rpm -qi openssl > f1.txt                 //創建明文的測試文件
  2. [root@svr7 ~]# head -2 f1.txt
  3. Name : openssl Relocations: (not relocatable)
  4. Version : 1.0.0 Vendor: Red Hat, Inc.
  5. [root@svr7 ~]# openssl enc -des3 -e -in f1.txt -out f1.txt.enc
  6. enter des-ede3-cbc encryption password:                 //設置一個密碼
  7. Verifying - enter des-ede3-cbc encryption password:     //再次輸入設置的密碼
  8. [root@svr7 ~]# file f1.txt*
  9. f1.txt: UTF-8 Unicode English text
  10. f1.txt.enc: data                                     //加密後變成非ASCII格式

2)解密文件dom

查看未解密的f1.txt.enc文件時顯示亂碼,必須解密後才能查看。tcp

  1. [root@svr7 ~]# head -2 f1.txt.enc
  2. Salted__▒▒▒▒C̏▒x▒6Q▒
  3. .O▒l▒g▒)▒▒▒{▒▒G▒▒t▒▒!▒▒▒Cc0▒▒▒c쬂▒V▒Dp▒▒9▒▒▒[▒▒▒X▒f▒ڍ▒j@▒▒▒▒▒▒▒=@▒.ɮP▒1e▒▒▒"M`▒W▒=▒▒▒-a,▒▒j7▒M▒▒b▒+▒▒ 麋0▒▒▒k▒▒z▒Zʢ
  4. [root@svr7 ~]# openssl enc -des3 -d -in f1.txt.enc -out f1-new.txt
  5. enter des-ede3-cbc decryption password:                 //輸入解密口令
  6. [root@svr7 ~]# head -2 f1-new.txt                     //查看解密後的文本
  7. Name : openssl Relocations: (not relocatable)
  8. Version : 1.0.0 Vendor: Red Hat, Inc.

步驟二:搭建企業自有的CA服務器,爲頒發數字證書提供基礎工具

1)配置CA簽署環境post

修改OpenSSL的主配置文件位於/etc/pki/tls/openssl.cnf,爲證書建立過程提供一些默認的設置:

  1. [root@svr7 ~]# vim /etc/pki/tls/openssl.cnf
  2. .. ..
  3. [ CA_default ]
  4. dir = /etc/pki/CA                 //CA相關文件的默認目錄
  5. certs = $dir/certs                 //爲用戶頒發證書的存放位置
  6. crl_dir = $dir/crl                 //證書廢止列表(CRL)文件的存放位置
  7. database = $dir/index.txt             //證書數據的索引文件,需手動創建
  8. certificate = $dir/my-ca.crt             //CA服務器根證書文件
  9. serial = $dir/serial                 //序號記錄文件,需手動創建
  10. .. ..
  11. private_key = $dir/private/my-ca.key     //CA服務器私鑰文件
  12. [ req_distinguished_name ]             //證書請求的識別信息
  13. countryName = Country Name (2 letter code)
  14. countryName_default = CN                         //國家名縮寫
  15. stateOrProvinceName = State or Province Name (full name)
  16. stateOrProvinceName_default = Beijing                     //所在省份
  17. localityName = Locality Name (eg, city)
  18. localityName_default = Beijing                             //所在城市
  19. 0.organizationName = Organization Name (eg, company)
  20. 0.organizationName_default = Tedu Technology Ltd     //所在單位/組織

默認CA配置目錄位於/etc/pki/CA/,須要創建初始化序列文件、索引文件:

  1. [root@svr7 ~]# cd /etc/pki/CA
  2. [root@svr7 CA]# touch index.txt                     //創建數據索引文件
  3. [root@svr7 CA]# echo 01 > serial                     //創建序號文件

2)爲CA服務器建立私鑰

此私鑰在後續簽發證書時都會用到,建議設置一個私鑰口令進行保護。

  1. [root@svr7 ~]# cd /etc/pki/CA/private
  2. [root@svr7 private]# openssl genrsa -des3 2048 > my-ca.key
  3. Generating RSA private key, 2048 bit long modulus
  4. ...............................+++
  5. ............+++
  6. e is 65537 (0x10001)
  7. Enter pass phrase:                                 //設置一個私鑰口令
  8. Verifying - Enter pass phrase:                     //再次輸入設置的私鑰口令
  9. [root@svr7 private]# chmod 600 my-ca.key
  10. [root@svr7 private]# ls -l my-ca.key
  11. -rw-------. 1 root root 1751 8月 6 14:12 my-ca.key

3)爲CA服務器建立根證書

此根證書將提供給全部客戶企業及我的,用來驗證證書持有者的合法身份。證書請求識別信息會根據第1)步設置的自動讀取,但通用名稱、郵箱地址須要手動指定。

  1. [root@svr7 private]# openssl req \
  2. > -new -x509 -key my-ca.key -days 365 > ../my-ca.crt
  3. Enter pass phrase for my-ca.key:                     //驗證私鑰口令
  4. You are about to be asked to enter information that will be incorporated
  5. into your certificate request.
  6. What you are about to enter is what is called a Distinguished Name or a DN.
  7. There are quite a few fields but you can leave some blank
  8. For some fields there will be a default value,
  9. If you enter '.', the field will be left blank.
  10. -----
  11. Country Name (2 letter code) [CN]:
  12. State or Province Name (full name) [Beijing]:
  13. Locality Name (eg, city) [Beijing]:
  14. Organization Name (eg, company) [Tedu Technology Ltd]:
  15. Organizational Unit Name (eg, section) []:
  16. Common Name (eg, your name or your server's hostname) []:Tedu CA Server
  17. Email Address []:zengye@tedu.cn

4)發佈根證書文件

本例中經過自帶的httpd服務提供Web方式的下載。

  1. [root@svr7 private]# mkdir /var/www/html/certs/
  2. [root@svr7 private]# cp ../my-ca.crt /var/www/html/certs/TARENA-CA.CRT
  3. [root@svr7 private]# service httpd start
  4. 正在啓動 httpd:httpd: Could not reliably determine the server's fully qualified domain name, using svr7.tedu.cn for ServerName
  5. [肯定]

確認在客戶機可以下載到根證書。

  1. [root@pc207 ~]# wget http://192.168.4.7/certs/TARENA-CA.CRT
  2. .. ..
  3. 2017-08-17 23:36:51 (49.5 MB/s) - 已保存 「TARENA-CA.CRT」 [1436/1436])

完成這些步驟之後,就已經具備了簽發證書的環境。當收到企業或我的提交的證書籤發請求(CSR)文件之後,就能夠執行驗證和簽發了(後續講解內容)。

2 案例2:郵件TLS/SSL加密通訊

2.1 問題

本案例要求爲基於Postfix+Dovecot的郵件服務器提供加密通訊支持,主要完成如下任務操做:

  1. 爲SMTP服務(postfix)添加TLS/SSL加密通訊支持
  2. 基於dovecot配置POP3s+IMAPS加密通訊支持
  3. 客戶端收發信測試,確保加密的郵件通訊可用

2.2 方案

使用兩臺RHEL7虛擬機,其中svr7做爲CA服務器,而mail做爲測試用的Postfix+Dovecot郵件服務器。另外可準備一臺pc120做爲收發郵件的Windows測試機,安裝郵件客戶端軟件或Outlook 2010。

2.3 步驟

實現此案例須要按照以下步驟進行。

步驟一:準備一個簡單的Postfix+Dovecot郵件服務器,支持SMTP認證

1) 快速安裝郵件相關軟件、添加郵箱帳號

確認已安裝postfix、dovecot、cyrus-sasl軟件包,啓動saslauthd服務:

  1. [root@www ~]# yum -y install postfix dovecot cyrus-sasl
  2. .. ..
  3. [root@www ~]# vim /etc/sasl2/smtpd.conf
  4. pwcheck_method: saslauthd
  5. mech_list: plain login
  6. [root@www ~]# service saslauthd start ; chkconfig saslauthd on
  7. 正在啓動 saslauthd: [肯定]

添加兩個郵箱帳號mickey、minnie。

  1. [root@www ~]# useradd mickey
  2. [root@www ~]# echo 123456 | passwd --stdin mickeyy
  3. 更改用戶 mickeyy 的密碼 。
  4. passwd: 全部的身份驗證令牌已經成功更新。
  5. [root@www ~]# useradd minnie
  6. [root@www ~]# echo 123456 | passwd --stdin minnie
  7. 更改用戶 minnie 的密碼 。
  8. passwd: 全部的身份驗證令牌已經成功更新。

2) 配置並啓動postfix服務

  1. [root@mail ~]# cd /etc/postfix/
  2. [root@mail postfix]# cp main.cf main.cf.origin
  3. [root@mail postfix]# vim main.cf
  4. .. ..
  5. myhostname = mail.tedu.cn
  6. mydomain = tedu.cn
  7. myorigin = $mydomain
  8. inet_interfaces = all
  9. mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
  10. mynetworks = 127.0.0.0/8
  11. home_mailbox = Maildir/                                 //設置郵箱路徑
  12. smtpd_sasl_auth_enable = yes
  13. smtpd_sasl_security_options = noanonymous
  14. smtpd_recipient_restrictions =
  15. permit_mynetworks,
  16. permit_sasl_authenticated,
  17. reject_unauth_destination
  18. [root@mail postfix]# systemctl restart postfix
  19. [root@mail postfix]# netstat -anpt | grep master
  20. tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 32120/master

3) 配置並啓動dovecot服務

  1. [root@mail dovecot]# vim /etc/dovecot/conf.d/10-mail.conf
  2. mail_location = maildir:~/Maildir                     //設置郵箱路徑
  3. .. ..
  4. [root@mail dovecot]# vim /etc/dovecot/conf.d/10-ssl.conf
  5. .. ..
  6. ssl = no                                             //先禁用SSL
  7. #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem         //註釋掉此處兩行內容
  8. #ssl_key = </etc/pki/dovecot/private/dovecot.pem
  9. [root@mail postfix]# systemctl restart dovecot
  10. 正在啓動 Dovecot Imap: [肯定]
  11. [root@mail postfix]# netstat -anpt | grep dovecot
  12. tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 32243/dovecot
  13. tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 32243/dovecot

4) 簡單測試一下,確認未做TLS/SSL加密時郵件收發可用

由root給mickey用戶發送一封郵件,確認mickey的郵箱能收到該郵件。

  1. [root@mail ~]# echo "Hello Mickey" | mail -s "Test Mail XXXX" mickey@tedu.cn
  2. [root@mail ~]# cat /home/mickey/Maildir/new/137690..     //找最新的一封郵件
  3. Return-Path: <root@tedu.cn>
  4. X-Original-To: mickey@tedu.cn
  5. Delivered-To: mickey@tedu.cn
  6. Received: by mail.tedu.cn (Postfix, from userid 0)
  7. id 28846836EA; Mon, 19 Aug 2017 17:36:58 +0800 (CST)
  8. Date: Mon, 19 Aug 2017 17:36:58 +0800
  9. To: mickey@tedu.cn
  10. Subject: Test Mail XXXX
  11. User-Agent: Heirloom mailx 12.4 7/29/08
  12. MIME-Version: 1.0
  13. Content-Type: text/plain; charset=us-ascii
  14. Content-Transfer-Encoding: 7bit
  15. Message-Id: <20130819093658.28846836EA@mail.tedu.cn>
  16. From: root@tedu.cn (root)
  17. Hello Mickey

步驟二:建立CSR證書籤發申請,提交給CA服務器簽署,下載簽署後的證書

1) 在mail服務器上,建立服務私鑰

因爲此例中的私鑰主要用於加密的郵件通訊,爲了方便服務控制,不要設置私鑰口令(在postfix中也很差配置) 。

  1. [root@mail ~]# cd /etc/pki/tls/private/
  2. [root@mail private]# openssl genrsa 2048 > mail.key         //不設置私鑰口令
  3. Generating RSA private key, 2048 bit long modulus
  4. ............................................................+++
  5. ................+++
  6. e is 65537 (0x10001)
  7. [root@mail private]# chmod 600 mail.key

2)在mail服務器上,建立CSR證書籤發請求

基於前一步建立的服務私鑰來創建CSR請求,根據提示設置的國家、省、市、組織信息要與CA根證書的設置保持一致。

  1. [root@mail private]# openssl req -new -key mail.key > ~/mail.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) [XX]:CN
  10. State or Province Name (full name) []:Beijing
  11. Locality Name (eg, city) [Default City]:Beijing
  12. Organization Name (eg, company) [Default Company Ltd]:Tedu Technology Ltd
  13. Organizational Unit Name (eg, section) []:
  14. Common Name (eg, your name or your server's hostname) []:mail.tedu.cn
  15. Email Address []:postmaster@tedu.cn
  16. Please enter the following 'extra' attributes
  17. to be sent with your certificate request
  18. A challenge password []:
  19. An optional company name []:

3)在CA服務器svr7上,簽署併發布證書

首先得到mail服務器(好比SCP方式)提交的CSR證書籤發請求文件,而後正式簽署並經過httpd服務提供下載。

  1. [root@svr7 ~]# scp 192.168.4.120:/root/mail.csr ./
  2. root@192.168.4.120's password:
  3. mail.csr 100% 1062 1.0KB/s 00:00
  4. [root@svr7 ~]# cd /etc/pki/CA/certs/
  5. [root@svr7 certs]# openssl ca -in ~/mail.csr > mail.crt     //簽署證書
  6. Using configuration from /etc/pki/tls/openssl.cnf
  7. Enter pass phrase for /etc/pki/CA/private/my-ca.key:         //驗證私鑰口令
  8. Check that the request matches the signature
  9. Signature ok
  10. Certificate Details:
  11. .. ..
  12. Certificate is to be certified until Aug 19 08:31:12 2014 GMT (365 days)
  13. Sign the certificate? [y/n]:y
  14. 1 out of 1 certificate requests certified, commit? [y/n]y
  15. Write out database with 1 new entries
  16. Data Base Updated
  17. [root@svr7 certs]# cp mail.crt /var/www/html/certs/     //複製到Web下載目錄

4)在mail服務器上,下載簽發好的證書文件,確認私鑰、證書的存放路徑

  1. [root@mail ~]# cd /etc/pki/tls/certs/
  2. [root@mail certs]# wget http://192.168.4.7/certs/mail.crt
  3. .. ..
  4. 2017-05-17 16:35:27 (300 MB/s) - 已保存 「mail.crt」 [4633/4633])
  5. [root@mail certs]# ls -lh /etc/pki/tls/certs/mail.crt
  6. -rw-r--r--. 1 root root 4.6K 8月 19 16:32 /etc/pki/tls/certs/mail.crt
  7. [root@mail certs]# ls -lh /etc/pki/tls/private/mail.key
  8. -rw-------. 1 root root 1.7K 8月 19 16:22 /etc/pki/tls/private/mail.key

步驟三:分別爲postfix、dovecot添加TLS/SSL加密通訊支持

大多數狀況下,加密的和非加密的服務會同時提供,容許郵箱用戶自行選擇 。固然,若是確實有須要,能夠只提供加密的收發信服務,禁用非TLS/SSL加密的收發信服務。

1) 修改postfix服務配置,啓用SSL加密通訊

  1. [root@svr7 ~]# vim
  2. .. ..
  3. smtpd_use_tls = yes
  4. #smtpd_tls_auth_only = yes             //若啓用此項,則非TLS的SMTP通訊將被阻止
  5. smtpd_tls_key_file = /etc/pki/tls/private/mail.key
  6. smtpd_tls_cert_file = /etc/pki/tls/certs/mail.crt
  7. #smtpd_tls_loglevel = 1                 //排錯階段可啓用此配置
  8. [root@mail ~]# service postfix reload
  9. 從新載入postfix: [肯定]

2)修改dovecot服務配置,啓用SSL加密通訊

  1. [root@mail ~]# vim /etc/dovecot/conf.d/10-ssl.conf
  2. .. ..
  3. ssl = yes
  4. #ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
  5. #ssl_key = </etc/pki/dovecot/private/dovecot.pem
  6. ssl_cert = </etc/pki/tls/certs/mailsvr.crt
  7. ssl_key = </etc/pki/tls/private/mailsvr.key
  8. [root@mail ~]# netstat -anpt | grep dovecot
  9. tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN 32243/dovecot
  10. tcp 0 0 0.0.0.0:143 0.0.0.0:* LISTEN 32243/dovecot
  11. tcp 0 0 0.0.0.0:993 0.0.0.0:* LISTEN 32243/dovecot
  12. tcp 0 0 0.0.0.0:995 0.0.0.0:* LISTEN 32243/dovecot

注意:若要禁用非加密的POP三、IMAP通訊,能夠參考如下配置(可選)。

  1. [root@mail ~]# vim /etc/dovecot/conf.d/10-master.conf
  2. inet_listener imap {
  3. port = 0                                 //停用非加密的imap服務
  4. }
  5. inet_listener pop3 {
  6. port = 0                                 //停用非加密的pop3服務
  7. }

步驟四:在郵件客戶端(好比Outlook Express)驗證加密的郵件通訊

1)爲測試用戶mickey配置郵件收發帳號

設置好電子郵件地址、用戶帳號密碼、收發信服務器等屬性。接收郵件選POP3或IMAP,勾選安全鏈接(SSL) ,如圖-1所示。

圖-1

2)加密的收發信測試

新建一封測試郵件,發送給minnie@tedu.cn、抄送給本身,確認可以成功發送並接收郵件。首次發送郵件時會出現安全提示,如圖-2所示,選「是」繼續便可。

圖-2

成功發出郵件之後,便可收取到抄送給本身的郵件,如圖-3所示。

相關文章
相關標籤/搜索