ssl
SSL(Secure Sockets Layer 安全套接層),及其繼任者傳輸層安全(Transport Layer Security,TLS)是爲網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡連接進行加密。
SSL (Secure Socket Layer)
爲Netscape所研發,用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程中不會被截取及竊聽。目前一般通用之規格爲40 bit之安全標準,美國則已推出128 bit之更高安全標準,但限制出境。只要3.0版本以上之I.E.或Netscape瀏覽器即可支持SSL。
當前版本爲3.0。它已被廣泛地用於Web瀏覽器與服務器之間的身份認證和加密數據傳輸。
SSL協議位於TCP/IP協議與各種應用層協議之間,爲數據通訊提供安全支持。SSL協議可分爲兩層: SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,爲高層協議提供數據封裝、壓縮、加密等基本功能的支持。 SSL握手協議(SSL Handshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
SSL協議提供的服務主要有:
1)認證用戶和服務器,確保數據發送到正確的客戶機和服務器;
2)加密數據以防止數據中途被竊取;
3)維護數據的完整性,確保數據在傳輸過程中不被改變。
SSL協議的工作流程:
服務器認證階段:1)客戶端向服務器發送一個開始信息“Hello”以便開始一個新的會話連接;2)服務器根據客戶的信息確定是否需要生成新的主密鑰,如需要則服務器在響應客戶的“Hello”信息時將包含生成主密鑰所需的信息;3)客戶根據收到的服務器響應信息,產生一個主密鑰,並用服務器的公開密鑰加密後傳給服務器;4)服務器恢復該主密鑰,並返回給客戶一個用主密鑰認證的信息,以此讓客戶認證服務器。
用戶認證階段:在此之前,服務器已經通過了客戶認證,這一階段主要完成對客戶的認證。經認證的服務器發送一個提問給客戶,客戶則返回(數字)簽名後的提問和其公開密鑰,從而向服務器提供認證。
從SSL 協議所提供的服務及其工作流程可以看出,SSL協議運行的基礎是商家對消費者信息保密的承諾,這就有利於商家而不利於消費者。在電子商務初級階段,由於運作電子商務的企業大多是信譽較高的大公司,因此這問題還沒有充分暴露出來。但隨着電子商務的發展,各中小型公司也參與進來,這樣在電子支付過程中的單一認證問題就越來越突出。雖然在SSL3.0中通過數字簽名和數字證書可實現瀏覽器和Web服務器雙方的身份驗證,但是SSL協議仍存在一些問題,比如,只能提供交易中客戶與服務器間的雙方認證,在涉及多方的電子交易中,SSL協議並不能協調各方間的安全傳輸和信任關係。在這種情況下,Visa和 MasterCard兩大信用卡公組織制定了SET協議,爲網上信用卡支付提供了全球性的標準
sasl
SASL全稱Simple Authentication and Security Layer,是一種用來擴充C/S模式驗證能力的機制。在Postfix可以利用SASL來判斷用戶是否有權使用轉發服務,或是辨認誰在使用你的服務器。
SASL提供了一個通用的方法爲基於連接的協議增加驗證支持,而XMPP使用了一個普通的XML名字空間來滿足SASL的需要。
1.如果SASL協商發生在兩臺服務器之間,除非服務器宣稱的DNS主機名得到解析,不能(MUST NOT)進行通信。
2.如果初始化實體有能力使用SASL 協商, 它必須(MUST)在初始化流的頭信息中包含一個值爲"1.0"的屬性'version'。
3.如果接收實體有能力使用SASL協商, 它必須(MUST)在應答從初始化實體收到的打開流標籤時(如果打開的流標籤包含一個值爲"1.0"的'version'屬性),通過 'urn:ietf:params:xml:ns:xmpp-sasl'名字空間中的<mechanisms/>元素聲明一個或多個驗證機制.
4.當SASL 協商時, 一個實體不能(MUST NOT)在流的根元素中發送任何空格符號(匹配production [3] content of [XML])作爲元素之間的分隔符(在以下的SASL例子中任何空格符號的出現僅僅是爲了增加可讀性); 這條禁令幫助確保安全層字節的精確度。
5.當SASL握手時,在XML元素中使用的任何XML 字符數據必須被編碼成base64, 編碼遵循RFC 3548 第三章的規定。
6.如果一個 簡單名字"simple username" 規範被選定的SASL機制所支持,(比如, 這被DIGEST-MD5 和CRAM-MD5 機制支持但不被EXTERNAL 和GSSAPI 機制支持), 驗證的時候初始化實體應該(SHOULD)在服務器間通信時提供簡單名字 自身的發送域(IP地址或包含在一個域標識符中的域名全稱),在客戶端與服務器之間通信時提供註冊用戶名(包含在一個XMPP節點標識符中的用戶或節點名)。
7.如果初始化實體希望以另一個實體的身份出現並且SASL機制支持授權ID的傳輸,初始化實體在SASL握手時必須(MUST)提供一個授權ID。如果初始化實體不希望以另一個實體的身份出現,初始化實體在SASL握手時不能(MUST NOT)提供一個授權ID。在[SASL] 的定義中,除非授權ID不同於從驗證ID(詳見[SASL])中得到的缺省的授權ID,初始化實體不能(MUST NOT)提供授權ID。如果提供了,這個授權ID的值必須(MUST)是<domain>的格式(對於服務器來說) 或<node@domain>的格式(對於客戶端來說).
8.在成功進行包括安全層的SASL握手之後,接收實體必須(MUST)丟棄任何從初始化實體得到的而不是從SASL協商本身獲得的信息。
9.在成功進行包括安全層的SASL握手之後,初始化實體必須(MUST)丟棄任何從接收實體得到的而不是從SASL協商本身獲得的信息。
10.參看 強制執行的技術,瞭解關於必須(MUST)支持的機制.
案例:
創建賬戶:
useradd bj
echo “123” |passwd –stdin bj
修改hosts:
修改主機名:
vim /etc/sysconfig/network
sendmail
rpm –ivh sendmil-cf
cd /etc/mail/
vim sendmil.mc 更改爲:addr=0.0.0.0
vim accesss
Connect:localhost.localdomain RELAY
Connect:localhost RELAY
Connect:127.0.0.1 RELAY
Connect:192.168.101.183 RELAY
Connect:192.168.101 RELAY
sh.com RELAY #中繼
bj.com OK
vim /etc/mail/local-host-names
DNS
yum install bind-9.3.6-4.P1.el5_4.2.i386.rpm
bind-chroot-9.3.6-4.P1.el5_4.2.i386.rpm
caching-nameserver-9.3.6-4.P1.el5_4.2.i386.rpm
編輯配置文件:
cd /var/named/chroot
cp –p named-cachingnameserver named.conf
vim named.conf
rndc reload
編輯區域文件:
正向查找:
cp localhost.zone bj.com.zone
反向查找:
cp -p named.local 101.168.192.zone
chkconfig named.on
指定Dns
nameserver 192.168.2.100
上海服務器同上.請確保DNS解析正常:
C:\Users\nate>nslookup
默認服務器: mail.bj.com
Address: 192.168.101.183
> mail.bj.com
服務器: mail.bj.com
Address: 192.168.101.183
名稱: mail.bj.com
Address: 192.168.101.183
> mail.sh.com
服務器: mail.bj.com
Address: 192.168.101.183
非權威應答:
名稱: mail.sh.com
Address: 192.168.101.188
> pop3.bj.com
服務器: mail.bj.com
Address: 192.168.101.183
名稱: mail.bj.com
Address: 192.168.101.183
Aliases: pop3.bj.com
> smtp.bj.com
服務器: mail.bj.com
Address: 192.168.101.183
名稱: mail.bj.com
Address: 192.168.101.183
Aliases: smtp.bj.com
> smtp.sh.com
服務器: mail.bj.com
Address: 192.168.101.183
非權威應答:
名稱: mail.sh.com
Address: 192.168.101.188
Aliases: smtp.sh.com
> pop3.sh.com
服務器: mail.bj.com
Address: 192.168.101.183
非權威應答:
名稱: mail.sh.com
Address: 192.168.101.188
Aliases: pop3.sh.com
做完dns後就可以發郵件了:(outlook2010)
創建賬戶
測試可以使用:
發送郵件:
但此時我們可以以任意身份發給任意用戶,很明顯這樣是不安全的:
加密:
openssl
smtps:
顯示sendmail詳細信息:
Version 8.13.8
Compiled with: DNSMAP HESIOD HES_GETMAILHOST LDAPMAP LOG MAP_REGEX
MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6
NETUNIX NEWDB NIS PIPELINING SASLv2 SCANF SOCKETMAP STARTTLS
TCPWRAPPERS USERDB USE_LDAP_INIT
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = dns
(canonical domain name) $j = dns.bj.com
(subdomain name) $m = bj.com
(node name) $k = localhost.localdomain
========================================================
telnet 127.0.0.1 25
安裝openssl
yum install openssl*
cd /etc/pki/
vim tls/openssl.cnf
更改45行 =/etc/pki/CA
由上圖可以得知要創建如下文件:
mkdir certs crl newcerts
touch index.txt serial
echo “01” >serial
match替換爲optional
證書服務器生成私鑰
cd /etc/pki/CA/private
openssl genrsa 1024 >cakey.pem
爲了安全最好更改一下私鑰權限:
chmod 600 cakey.pem
自簽發:
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
----- #因爲在前面我們已經設置過國、省、組織名不嚴格匹配了,而且只是實驗,這裏隨便寫好了 A challenge password []:#挑戰口令,直接確定就好 |
證書客戶端私鑰:
cd /etc/mail mkdir certs cd certs
openssl genrsa 1024 >senmail.key
CSR 請求文件 (Certificate Signing Request)此文件頒發證書後可刪除
openssl req –mew –key sendmail.key –out sendmail.csr
----- Email Address []: Please enter the following 'extra' attributes |
頒發證書:
openssl ca –in sendmail.csr –out sendmail.crt
Signature ok Certificate is to be certified until Mar 20 03:53:38 2013 GMT (365 days) 1 out of 1 certificate requests certified, commit? [y/n]y #確定要籤? |
更改權限:
chmod 600 certs
cp /etc/pki/CA/cacert.pem /etc/mail/cets/
vim /etc/mail/senmail.mc
重啓服務:
可以看到STARTTLS
測試:
將發送服務器加密類型改爲tls:
會提示你不信任根證書:
查看,並安裝:
測試完成:
加密發送成功:
pops
yum install dovecot
mkdir -pv /etc/dovecot/certs 創建多級子目錄
cd /etc/dovecot/certs
[root@localhost certs]# openssl genrsa 1024 >dovecot.key #私鑰
Generating RSA private key, 1024 bit long modulus
...++++++
.......................++++++
e is 65537 (0x10001)
[root@localhost certs]# openssl req -new -key dovecot.key -out dovecot.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) [GB]:CN
State or Province Name (full name) [Berkshire]:HN
Locality Name (eg, city) [Newbury]:ZZ
Organization Name (eg, company) [My Company Ltd]:ZZU
Organizational Unit Name (eg, section) []:NET
Common Name (eg, your name or your server's hostname) []:pop3.bj.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
[root@localhost certs]# openssl ca -in dovecot.csr -out dovecot.crt#頒發證書
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 2 (0x2)
Validity
Not Before: Mar 23 17:42:23 2012 GMT
Not After : Mar 23 17:42:23 2013 GMT
Subject:
countryName = CN
stateOrProvinceName = HN
organizationName = ZZU
organizationalUnitName = NET
commonName =pop3.bj.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
9D:0D:A9:89:C7:E6:54:7A:7E:76:99:1A:1D:97:FD:15:97:A2:7C:E4
X509v3 Authority Key Identifier:
keyid:12:9B:1E:DA:07:A7:0E:40:7A:EA:8B:EC:1C:C5:1B:EF:62:72:7F:A8
Certificate is to be certified until Mar 23 17:42:23 2013 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
編輯配置文件:
vim dovecot.conf
protocols = imap imaps pop3 pop3s
ssl_cert_file = /etc/pki/dovecot/certs/dovecot.pem
ssl_key_file = /etc/pki/dovecot/certs/dovecot.key
chmod 600 *
重啓:
測試:
接受服務器端口改爲995:,選擇要求加密連接
會提示你不信任根證書:
查看,安裝:
測試完成:
郵件接收成功:
sasl:
chkconfig –list |grep sasl
chkconfig saslauthd on
編輯配置文件:
vim sendmail.mc
重啓:
service saslauthd restart
[root@localhost certs]# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to Mail.bj.com (127.0.0.1).
Escape character is '^]'.
220 Mail.bj.com ESMTP Sendmail 8.13.8/8.13.8; Sat, 24 Mar 2012 02:45:47 +0800
mail from:mail.bj.com
530 5.7.0 Authentication required #需要驗證身份
auth login Ymo= 要輸入經過加密的用戶名和密碼
334 UGFzc3dvcmQ6
MTIz
[root@localhost certs]# echo -n "bj"|openssl base64
Ymo=
[root@localhost certs]# echo -n "123"|openssl base64
MTIz
235 2.0.0 OK Authenticated
mail from:[email protected]
250 2.1.0 [email protected]... Sender ok
rcpt to:[email protected]
250 2.1.5 [email protected]... Recipient ok
data
354 Enter mail, end with "." on a line by itself
from:[email protected]
subject:test666666666666
666666666666666666666666666666666
.
250 2.0.0 q2NIjldF009914 Message accepted for delivery
接收到的郵件:
未更改outlook設置會有如下提示:
選擇使用密碼驗證登陸:
測試成功:
發送郵件成功: