天天看點

隔牆有耳之資料在傳輸中的安全

大家現在都知道資料在傳輸的過程中很容易會被别人得到,如果我們的資料是明文傳輸的,那麼你就非常不幸了,資料就會被别人一覽無遺,那怎麼做到資料在傳輸的時候是密文呢?

下面俺來介紹一下進行資料在傳輸中的加密

都知道在傳輸過程中的加密方式有對稱加密、非對稱加密、證書加密,如過在大量的資料傳輸時用證書或非對稱加密時非常耗資源的,用對稱加密又不是很安全那怎麼辦呢?

在加密的時候有加密的體系進行保護的,加密體系是:1、windows級别

2、SQL伺服器級别(伺服器主密鑰)

3、SQL資料庫級别(資料庫主密鑰)

比如:windows級别保護SQL伺服器級别而SQL伺服器級别保護資料庫級别,資料庫級别會保護對稱加密、非對稱加密、證書加密,我們還可以讓證書保護非對稱加密再保護對稱加密。這樣是不是很安全啊!!!

伺服器主密鑰是不能手動删除或建立的,預設情況下伺服器主密鑰直接保護資料庫主密鑰,不用設定。如果伺服器主密鑰被破壞了我們怎麼辦呢?我們可以對伺服器主密鑰進行加密,破壞了可以直接還原。

我們來抓包看一下,插入一條記錄,利用抓包器看能不能把我們的資訊抓到。

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225049nLW8.jpg"></a>

是可以抓到的,因為是明文傳輸的。

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225057DK5g.jpg"></a>

我們在伺服器上安裝一下證書,然後設定一下在如圖:

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225061R4Cy.jpg"></a>

然後如圖設定,右擊屬性

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225065gQ4l.jpg"></a>

把否改為是,選上我們申請的證書就OK了

利用證書加密後,在傳輸資料的時候就不再是明文了,這樣就不會怕資料丢失了,就算得到了他沒有我們的證書一樣不能打開我們的資料。

在上面說了伺服器主密鑰是不能手動删除或建立的,但是我們是可以備份和還原的,下面來看關于伺服器主密鑰的一下特點介紹。

我們先來看看伺服器主密鑰的備份與還原,與以前備份大緻差不多。

備份

backup service master key to file='c:\bak\smk.key' encryption by password='Ccjsj1200'(備份到C槽并在還原時需要的密碼)

restore service master key from file='c:\bak\smk.key' decryption by password='Ccjsj1200'(用密碼進行還原)在還原的時候因為我們的伺服器主密鑰沒有損壞是以提示:(新舊主密鑰完全相同。不需要重新加密資料)。如圖:

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225072kUQf.jpg"></a>

下面我們看資料庫主密鑰,它是需要我們手動建立的預設是受伺服器主密鑰保護,如果采用預設在資料庫主密鑰下建立對稱與非對稱密鑰是不用手動開啟的,如果把預設的保護給删除建立對稱與非對稱密鑰時資料庫主密鑰是需要我們手動開啟的(在建立資料庫主密鑰的時候才用的是128位的3DES密鑰)。

create master key encryption by password='Ccjsj1200'(建立資料庫主密鑰)

顯示目前資料庫密鑰的資訊:

select * from sys.databases

select * from sys.symmetric_keys

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225075KgmQ.jpg"></a>

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225079gC5M.jpg"></a>

備份資料庫主密鑰

backup master key to file='c:\bak\msk.key' encryption by password='Ccjsj1200'(備份并設定還原密碼)

我們來删除資料庫主密鑰并檢視是否還存在如圖:

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225083k78N.jpg"></a>

還原資料庫主密鑰并檢視資訊

restore master key from file='c:\bak\msk.key' decryption by password='Ccjsj1200' encryption by password='Ccjsj1200相當于建立這個資料庫主密鑰時的密碼)'

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225087Fu4z.jpg"></a>

還原是沒有問題的,前面也已經說了它預設是受到伺服器主密鑰保護的,那怎麼還删除伺服器主密鑰對它的保護呢?

例:1、在删除伺服器主密鑰對資料庫主密鑰保護之前我們來建立一個非對稱密鑰看是否需要我們再啟動資料庫主密鑰?

2、删除後再建立一個非對稱密鑰看有什麼反應?

是不是跟我們前面說的一樣呢?好我們還沒有删除,建立一個非對稱密鑰實驗一下。Go

create asymmetric key asy1(名稱) with algorithm=RSA_2048(加密方式),不删除我們可以直接建立非對稱密鑰,看一下删除是什麼樣子呢?

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225091bBpg.jpg"></a>

alter master key drop encryption by service master key(删除伺服器主密鑰對資料庫主密鑰的保護)

還原伺服器主密鑰對資料庫主密鑰的保護的指令是:

alter master key add encryption by service master key

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225095JRoK.jpg"></a>

删除以後報錯了,需要我們建立一個主密鑰或打開主密鑰,

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_12452251008lQy.jpg"></a>

open master key decryption by password='Ccjsj1200'(打開資料庫主密鑰)

再來建立一下試試

create asymmetric key asy2 with algorithm=RSA_2048是可以的,與我們之前說的一樣,在這裡說的怎樣删除伺服器主密鑰對資料庫主密鑰的保護,還有怎麼啟動資料庫主密鑰與建立非對稱密鑰。那怎麼删除資料庫主密鑰呢?這個簡單跟以前一樣就是

drop master key這樣就OK了。

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225104J6sx.jpg"></a>

再來看看證書的的有關資訊

正常建立證書

create certificate cer1 with subject='test(描述)',start_date='06-15-2009',expiry_date='06-15-2010'

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225108MtdH.jpg"></a>

建立證書并用密碼對其保護:create certificate cer2 encryption by password='Ccjsj1200' with subject='test',start_date='06-15-2009',expiry_date='06-15-2010'

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225112RYQs.jpg"></a>

我們建立的兩個證書已經存在了。

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225115QKiu.jpg"></a>

檢視證書資訊

select * from sys.certificates

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225120k491.jpg"></a>

修改私鑰的密碼,

alter certificate cer2 with private key (decryption by password='Ccjsj1200'(舊密碼),encryption by password='Ccjsj1200'(新密碼))

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225124dVyl.jpg"></a>

備份證書,我們備份時備份它的私鑰與證書

backup certificate cer2 to file='c:\bak\mycer.cer' with private key (file='c:\bak\mypri',decryption by password='Ccjsj1200',encryption by password='Ccjsj1200')

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225128LctE.jpg"></a>

我們先來檢視一下,然後删除第二個證書,然後再檢視一下,第二個證書就沒有了

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225132eCkX.jpg"></a>

接下來開始還原證書

create certificate cer2 from file='c:\bak\mycer.cer' with private key (file='c:\bak\mypri',decryption by password='Ccjsj1200'(還原時的密碼),encryption by password='Ccjsj1200'(建立的密碼))

還原成功後我們再來檢視一下證書

<a href="http://liuyonglei.blog.51cto.com/attachment/200906/17/501877_1245225136thqw.jpg"></a>

好了證書還原成功了。等着一切都做好以後我們就不會再害怕資料被别人在傳輸的時候丢失了。

在傳輸的時候沒有了後顧之憂,那在資料存儲的時候怎麼辦呢?下一篇博文我們會介紹。請大家光顧哦。O(∩_∩)O~

本文轉自 liuyonglei 51CTO部落格,原文連結:http://blog.51cto.com/liuyonglei/167650,如需轉載請自行聯系原作者