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
telnet 127.0.0.1 25
telnet 127.0.0.1可以看到,未啟用數據加密
安裝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
:88,90 s/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
加y
打開
強制驗證
重啟:
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:bj@bj.com
250 2.1.0 bj@bj.com... Sender ok
rcpt to:sh@sh.com
250 2.1.5 sh@sh.com... Recipient ok
data
354 Enter mail, end with "." on a line by itself
from:bj@bj.com
to:sh@sh.com
subject:test666666666666
666666666666666666666666666666666
.
250 2.0.0 q2NIjldF009914 Message accepted for delivery
接收到的郵件:
此時已經需要驗證身份,才能發送郵件了
未更改outlook設置會有如下提示:
選擇使用密碼驗證登陸:
測試成功:
發送郵件成功:
實驗結束!!!!!!!!!
[火星人 ] linux郵件伺服器的加密(ssl)與驗證(sasl)已經有913次圍觀