2013/06/12

on
● -- ● IIS 7 自我簽署憑證 https wcf 加密解密
.■■■ -RSA加密演算法 Wiki ;; md5 雜湊演算法 Wiki ;; Base64 Wiki (編碼後約為原長的1.351倍) ;;
.Net 加密類 ;; 3DES(或稱為Triple DES三重資料加密演算法)Wiki ;;  System.Security.Cryptography
.■■■ - 憑證建立 : 伺服器層級的 IIS 區域找「伺服器憑證」
.■■■ -   IIS 7.5 這次才新增的 ApplicationPoolIdentity 內建帳戶,而這就是為 IIS 7.5 特別訂製的「虛擬帳戶」。我們在檔案總管設定權限時「虛擬帳戶」是無法被選取的,只能手動輸入這組特殊的帳戶名稱,IIS 應用程式集區的虛擬帳戶名稱表示方式為:【IIS AppPool\應用程式集區名稱】,例如內建的應用程式名稱就稱為: 【IIS AppPool\DefaultAppPool】,如果你新增了一個應用程式集區名為 MyAppPool 的話,虛擬帳戶的表示法就是:【IIS AppPool\MyAppPool】。
  • 在設定 NTFS 權限選取使用者時需先手動輸入虛擬帳戶帳號。
  • 按下 [檢查名稱] 或 [Check Names] 時,名稱若出現「底線」就代表該「虛擬帳戶」是有效的。
  • 最後,我們看一下 [工作管理員] 中呈現的工作處理程序 (w3wp.exe) 的執行身份也是虛擬帳戶DefaultAppPool 這個身份。
以上資料來自 : 介紹 IIS 7.5 的應用程式集區與新增的「虛擬帳戶」特性
.■■■ - Makecert.exe (憑證建立工具 msdn) :
■ - C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\x64\
WCF Server端用 : makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=WosServer -sky exchange -pe
WCF Client 端用 : makecert.exe -sr CurrentUser -ss My -a sha1 -n CN=WosClient  -sky exchange -pe
.■■■ - ServiceModel 中繼資料公用程式工具 ( Svcutil.exe )
.■■■ - HOW TO:使用傳輸安全性和訊息認證 msdn
.■■■ - HOW TO:以 SSL 設定 IIS 裝載的 WCF 服務 msdn
.■■■ - WCF服務-基礎
.■■■ - Windows Communication Foundation 組態結構描述
.■■■ -( WCF 功能詳細資料 Msdn )
.■■■ -(邊 學邊做 - WCF 及 Restful 服務開發)
.■■■ - X509數字證書之三:Wcf服務端和客戶端證書
.■■■ - X509數字證書之二:摘要和簽名
.■■■ - X509數字證書之一:加密和解密
.■■■ - WCF 自訂使用者帳號/密碼篇(一) CS
.■■■ - WCF 系列相關技術文章 (CN - 含 .net 相關技術文章 )
.■■■ - 技巧和訣竅:在IIS 7.0上使用自我簽署憑證來啟用SSL
.■■■ - 'IIS APPPOOL\DefaultAppPool' 的登入失敗的問題所在及如何解決
.■■■ - 使用者 IIS APPPOOL 的登入失敗
.■■■ -
.■■■ - 購買與安裝 SSL 憑證完全攻略(以 IIS7 為例)
.■■■ -  [技術文章] IIS6 轉 IIS7 的設定對應
.■■■ - [IIS 7.0]SSL-建立自我簽署憑證
.■■■ - IIS 7 設定 SSL 憑證 攻略
.■■■ - WCF 服務同時支援 HTTP 和 HTTPS
.■■■ - 使用OpenSSL建立CA及簽發SSL憑證
.■■■ -
.■■■ - 網站SSL加密原理簡介(解析傳輸協定與運作流程)
=======================================================
.■■■ -數字簽名是什麼 "數字簽名"(digital signature)和"數字證書"(digital certificate)
.■■■ - 密碼學技巧 : 加密演算法 encryption algorithm , 加密鑰匙 encryption key , 解密鑰匙 decryption key , 目前密碼學的加密演算法可分為兩大類,分別是對稱金鑰演算法 symmetric key algorithm ﹞和非對稱金鑰演算法 asymmetric key algorithm ,
.■■■ - 開放源碼的安全演算法工具:
OpenSSL (1) - 基礎操作與雜湊演算法
OpenSSL (2) - 對稱式加解密演算法
OpenSSL (3) - RSA 非對稱式加解密演算法

.■■■ -
.■■■ -
.■■■ -WCF自定義用戶賬號密碼之使用者認證的WCF服務wsHttpBinding總結 (CN)
.■■■ -WCF開發框架之證書加密使用說明書(轉載)
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -1:密碼編譯服務介紹密碼編譯服務概要,根據不同的情境.Net Framework支援的加密方法跟作法,包括下列項目
基本密碼編譯私密(公開)金鑰加密數位簽章雜湊值亂數產生ClickOnce 資訊清單…等,有興趣可自行研究。

2:NET Framework 提供的雜湊演算法類別

3:SHA1演算法已於2005年2月宣稱已被破解
.■■■ - AES加密範例 (C#)
.■■■ - .NET 非對稱式加密與數位簽章程式設計入門 (C#)
.■■■ - [VB.NET]SecureString較為安全的加密字串類別
.■■■ - 【茶包射手專欄】跨機器之WCF認證問題
.■■■ - 點部落 http://www.dotblogs.com.tw/
.■■■ - [VB.net][VB6][VBA]客製化 Base64 編碼/解碼 的技巧
(一)數底的轉換
(二)使用非正規的索引字串達到保密效果
(三)建立自己的演算法 - 對資料加解密

.■■■ - VB.net内置BASE64加密解密 :
'加密代码
Dim Str as string=System.Convert.ToBase64String(System.Text.Encoding.Default.GetBytes("aaaaaaaaaaaaaaaaaaaaaaaaaa"))

'解密代码
Dim Str as string = System.Text.Encoding.Default.GetString(System.Convert.FromBase64String("YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWE="))
.■■■ - VB.NET Base64編碼解碼
.■■■ - 在 .NET 中實現 Base64 編碼與解碼 (vb.net)
.■■■ - 如何將圖檔轉成base64 encoding
.■■■ -
.■■■ -
.■■■ -
.■■■ - C# RSA加密解密及RSA簽名和驗證-.NET教程,安全和優化
.■■■ - [C#.NET] 字串及檔案 利用 DES / AES 演算法加解密  在.NET裡
.■■■ -C# .NET 非對稱式加密與數位簽章程式設計入門
.■■■ -
.■■■ -
DES 演算法會用到 DSACryptoServiceProvider 類別

AES 演算法 : 2.0:RijndaelManaged 類別 (AES又叫Rijndael)
3.5:除了原本的 RijndaelManaged 類別 還多了 AesCryptoServiceProvider 類別,這兩個類別產生的結果相同。

AES與DES這兩種加密演算法都需要KEY與IV,AES/DES類別都有以下兩種屬性,必需要依照規則丟固定長度的Bit ( 1 Byte=8 Bit,  64 Bit= 8 Byte, 128 Bit= 16 Byte, 256 Bit= 32 Byte )
    LegalBlockSizes是表示 IV ( Initialization Vector )的容許長度,單位Bit
    LegalKeySizes表示 KEY 的容許長度,單位Bit
xxx ----- LegalBlockSizes --------=======LegalKeySizes===
---------Max--------Min---------===Max========Min===
AES---- 128 ------ 128 ---------== 256 ======== 128 ===
DES----- 64 -------- 64---------=== 64 ========= 64 ===
加密的KEY或IV能用中文,只要能符合長度就可以

編碼的部份,用Encoding.UTF8.GetBytes(source)來取得原始資料的Byte,所以解密的時候也要用Encoding.UTF8 ; 另外加密後的Byte Convert String是用Convert.ToBase64String所以解密的時候也要用相對應的方式來處理

AES比DES支援的長度還要長,所以它有比較多的選擇來處理KEY/IV,比如
SHA256CryptoServiceProvider 類別:將資料雜湊後產生32 Byte的資料
MD5CryptoServiceProvider 類別:將資料雜湊後產生16 Byte的資料

AES/DES初始化的時候就會自己產生KEY跟IV,只要將它產生的KEY/IV記下就好了
var provider = new AesCryptoServiceProvider();
var key = Convert.ToBase64String(provider.Key);
var iv = Convert.ToBase64String(provider.IV);
.■■■ -
.■■■ - .NET中提供七種 Hash加密算法,它們都繼承於抽象類 HashAlgorithm ,而且我們經常使用MD5,SHA1和SHA256等加密算法。
System.Object
  System.Security.Cryptography.HashAlgorithm - MSDN )
    System.Security.Cryptography.KeyedHashAlgorithm
    System.Security.Cryptography.MD5
    System.Security.Cryptography.RIPEMD160
    System.Security.Cryptography.SHA1
    System.Security.Cryptography.SHA256
    System.Security.Cryptography.SHA384
    System.Security.Cryptography.SHA512

.NET中提供五種 對稱加密算法,它們都繼承於抽象類 SymmetricAlgorithm (  )
System.Object
  System.Security.Cryptography.SymmetricAlgorithm - (MSDN)
    System.Security.Cryptography.Aes
    System.Security.Cryptography.DES
    System.Security.Cryptography.RC2
    System.Security.Cryptography.Rijndael
    System.Security.Cryptography.TripleDES
加密過程 : Plain Text => UTF8 => Cipher Text => Base64
解密過程 : Plain Text <= UTF8 <= Cipher Text <= Base64

.NET中提供四種 非對稱加密算法,它們都繼承於抽象類AsymmetricAlgorithm,常用為 RSA。
System.Object
  System.Security.Cryptography.AsymmetricAlgorithm - (MSDN)
    System.Security.Cryptography.DSA
    System.Security.Cryptography.ECDiffieHellman
    System.Security.Cryptography.ECDsa
    System.Security.Cryptography.RSA
    ...... System.Security.Cryptography.RSACryptoServiceProvider
RSA加密算法是一種非對稱和雙鑰加密算法,在公鑰加密標准和電子商業中RSA被廣泛使用。
在雙鑰加密的情況下,密鑰有兩把,一把是公開的公鑰,還有一把是不公開的私鑰。
雙鑰加密的原理如下:

    a) 公鑰和私鑰是一一對應的關系,有一把公鑰就必然有一把與之對應的、獨一無二的私鑰,反之亦成立。

    b) 所有的(公鑰, 私鑰)對都是不同的。

    c) 用公鑰可以解開私鑰加密的信息,反之亦成立。

    d) 同時生成公鑰和私鑰應該相對比較容易,但是從公鑰推算出私鑰,應該是很困難或者是不可能的。

現在的數字簽名加密主要是使用RSA算法,什麼是數字簽名大家請點這裏(中文)。

以下只介紹方法流程, 原碼 C# 在此 ( CN 原文)
現在我們知道RSA算法是使用公鑰和密鑰進行加密和解密,所以我們先定義一個方法來生成公鑰和密鑰。
通過 RSACryptoServiceProviderToXmlString() 方法我們生成了一對公鑰和密鑰,當参數为true 表示同時包含 RSA 公鑰和私鑰,反之表示僅包含公鑰。
接着我們定義RSA的加密方法,首先我們從流中讀取密鑰和公鑰,然後傳遞给FromXmlString()方法,最後對平文進行加密。
参照加密方法我們很快的實現RSA的解密方法,同样我們從流中讀取密鑰,然後傳遞给FromXmlString()方法,最後對密文進行解密,注意調用的是RSA算法的Decrypt()方法,在使用膠水代碼時千萬別忘記修改了。
.■■■ -
.■■■ - [C#.NET] RSA 的長度限制
RSA加密演算法不利於大資料的加密,因為它在演算過程中很耗時,所以非對稱加密 RSA 僅適合小資料的加密,大資料得用對稱加密AES/DES。對於大資料(byte[]長度過長),.NET直接宣判死型
測試檔案加密, 9M花了3秒多,尚可接受啦~ 檔案解密測試跑了兩分多鐘,害我以為電腦掛點了。
不論是微軟還是維基,都表明RSA的加解密效能遠不如其他演算法,那也正是RSA演算法較安全之故,也因此不利做大檔案的加解密。
對於大檔案,我們可以怎麼做? 讓AES跟RSA合體吧!
.■■■ -
.■■■ - 使用X.509數字證書加密解密實務 (CN)
(一)-- 證書的獲得和管理
(二)-- 使用RSA證書加密敏感數據
(三)-- 使用RSA證書結合對稱加密技術加密長數據
.■■■ - 
.■■■ - 在ASP.NET中常用的有:
不可逆的HASH算法,如MD5,SHA1,
對稱可逆的DES,
不對稱可逆的RSA等.
選擇對稱可逆的 AES算法衍生算法: Rijndael ,因它加密後長度比較小,適合在URL中攜帶, 而原本考慮的RSA算法生成128位長度的字串,顯得未免太長了,.至於 MD5, SHA1, BASE64 之類的在.NET裡一條語句就搞定
.■■■ -
.■■■ -在.Net中可用 RSACryptoServiceProvider 這個類來產生一個 RSA物件,而每次生產這個物件時他也會 Random 一對 Public Key及 Private Key,但若果我已有一對我自己的 Public Key及Private Key (當然這一對key是有關係的,是由其他Program用 RSA 演算出來,不是無中生有),我希望用自己的 Public Key 加密,而且用自己的 Private Key解密。那要如何做? 這個物件的ToXmlString 及 FormXmlString 方法只是接受自己、或是 Base 64格式的 String,那我在vb.net要如何做?
.■■■ -
.■■■ -
.■■■ -
======================================================
.■■■ - Base64 是用 64 進制 的表示法,它用 64 個不同的符號分別代表數據的 0-63,就如同我們在 16 進位下用 0123456789ABCDEF 表示 0-15 一樣。這個 Base64 的索引字串( rfc1421)就是:
     ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/

.■■■ -[VB.net][VB6][VBA]客製化 Base64 編碼/解碼 的技巧
(一)數底的轉換
(二)使用非正規的索引字串達到保密效果
(三)建立自己的演算法 - 對資料加解密
.■■■ - .Net 可用 System.Convert 類別的 ToBase64String () 得到 Base64 字串
.■■■ - .Net 可用 FromBase64String  方法是設計來處理包含要解密之所有資料的單一字串。 若要從資料流解碼 Base-64 字元資料,請使用 System.Security.Cryptography.FromBase64Transform 類別
.■■■ - Base64 編碼後的長度是可以明確估算的 = ((Bytes.Lenth-1)\3+1)*4
.■■■ - 正規 Base64 的主要用途在數據傳送,它的強項不在資料的保密,用 ASCII 字元呈現二進位資料反而在傳播的過程中更清澈、透明,而擴展了適用的範疇。雖然經過 Base64 編碼後的資料量大約多了 33%,但在小量資料的處理上它提供了簡潔的解決方案,像是:
1. 在 MIME 標準 Email 傳送把圖片、音效等資料直接嵌入信件本文,形成附檔。
2. 在資料庫的文字欄位裡面,可以用文字型態存取圖像資料,像是會員頭像、身分頭銜標章圖示等。
.■■■ -
.■■■ -Base64 加解密
'=== 加密字串 ===
Dim base64Str As String = System.Convert.ToBase64String(System.Text.UnicodeEncoding.Unicode.GetBytes("要加密的字串"))

'=== 解密字串 ===
Dim str As String =System.Text.UnicodeEncoding.Unicode.GetString(System.Convert.FromBase64String("要解密的字串") )
.■■■ -
.■■■ - VB.Net JPG image to Base64 And Base64 to JPG image Code
Public Function ImageToBase64(ByVal tImg As Image, ByVal tImgFormat As System.Drawing.Imaging.ImageFormat) As String
        'tImgFormat : Bmp, Emf, Exit, Gif, Guid, Icon, Jpeg, MemoryBmp, Png, Tiff, Wmf
        Dim mMs As New MemoryStream()
        tImg.Save(mMs, tImgFormat)
        Dim mImgBytes() As Byte = mMs.ToArray()
        Dim mBase64Str = Convert.ToBase64String(mImgBytes)
        Return mBase64Str
    End Function

    Public Function Base64ToImage(ByVal tBase64Str As String) As Image
        Dim mImgBytes() As Byte = Convert.FromBase64String(tBase64Str)
        Dim mMs As New MemoryStream(mImgBytes, 0, mImgBytes.Length)
        mMs.Write(mImgBytes, 0, mImgBytes.Length)
        Dim mImg As Image = Image.FromStream(mMs, True)
        Return mImg
    End Function
-

Binding Class NameTransportMessage EncodingMessage VersionSecurity ModeReliable MessagingTransaction Flow (disabled by default)
BasicHttpBindingHTTPTextSOAP 1.1NoneNot SupportedNot Supported
WSHttpBindingHTTPTextSOAP 1.2 WS-Addressing 1.0MessageDisabledWS-AtomicTransactions
WSDualHttpBindingHTTPTextSOAP 1.2 WS-Addressing 1.0MessageEnabledWS-AtomicTransactions
WSFederationHttpBindingHTTPTextSOAP 1.2 WS-Addressing 1.0MessageDisabledWS-AtomicTransactions
NetTcpBindingTCPBinarySOAP 1.2TransportDisabledOleTransactions
NetPeerTcpBindingP2PBinarySOAP 1.2TransportNot SupportedNot Supported
NetNamedPipesBindingNamed PipesBinarySOAP 1.2TransportNot SupportedOleTransactions
NetMsmqBindingMSMQBinarySOAP 1.2MessageNot SupportedNot Supported
MsmqIntegrationBindingMSMQNot Supported (uses a pre-WCF serialization format)Not SupportedTransportNot SupportedNot Supported
CustomBindingYou DecideYou DecideYou DecideYou DecideYou DecideYou Decide

 .■■■ -1. .pfx 帶有私鑰的證書 : 由Public Key Cryptography Standards #12,PKCS#12標準定義,包含了公鑰和私鑰的二進制格式的證書形式,以 pfx 作為證書文件後綴名。
.■■■ - 2. .cer 二進制編碼的證書 : 證書中沒有私鑰,DER 編碼二進制格式的證書文件,以 cer 作為證書文件後綴名。
.■■■ - 3. .cer Base64 編碼的證書 : 證書中沒有私鑰,BASE64 編碼格式的證書文件,也是以 cer 作為證書文件後綴名。
.■■■ - 由上可看出,只有 pfx 格式的數字證書是包含有私鑰的,cer 格式的數字證書裡面只有公鑰沒有私鑰。

.■■■ - WCF Client X509 跳過驗證 或 自定驗證
Imports System.Net
Imports System.Security.Cryptography.X509Certificates
Imports System.Net.Security

Private Sub Form_Load() (sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'委派一個新的副程式來取代原有的驗證方法。
        ServicePointManager.ServerCertificateValidationCallback = New RemoteCertificateValidationCallback(AddressOf ValidateCertificate)
Enc Sub

Private Function ValidateCertificate(ByVal sender As Object, ByVal certificate As X509Certificate, ByVal chain As X509Chain, ByVal sslPolicyErrors As SslPolicyErrors) As Boolean
        'Return True to force the certificate to be accepted.
        Return True
    End Function
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -
.■■■ -




-

0 意見: