ในโปรโตคอล Server Message Block (SMB) 3.0 ที่มาพร้อม Windows Server 2012 / Windows 8 สามารถเข้ารหัสข้อมูลที่ถ่ายโอนผ่านเครือข่ายระหว่าง SMB File Server และ Client ได้ ข้อมูลจะถูกเข้ารหัสแบบโปร่งใสจากมุมมองของ Client และไม่ต้องใช้ทรัพยากรหรือโครงสร้างพื้นฐานมากนัก ไม่เหมือนการใช้ VPN, IPSec หรือ PKI Infrastructure ในรุ่นล่าสุด SMB 3.1.1 (ใช้ใน Windows 10 และ Windows Server 2016) ใช้การเข้ารหัสแบบ AES 128 GCM ซึ่งเพิ่มประสิทธิภาพอัลกอริทึมอย่างมาก นอกจากนี้ยังมีการลงนามและตรวจสอบข้อมูลอัตโนมัติ
การทำงานของ SMB Encryption
ต้องเข้าใจก่อนว่า หาก Client และ Server รองรับ SMB รุ่นต่างกัน เมื่อเชื่อมต่อ ระบบจะเลือก SMB รุ่นสูงสุดที่ทั้งสองฝ่ายรองรับ หมายความว่า Client ที่รัน Windows รุ่นเก่ากว่า Windows 8 / Server 2012 จะไม่สามารถเข้าถึง Network Share ที่เปิดใช้งาน SMB Encryption ได้
บน File Server สามารถดูรุ่น SMB Protocol ที่ Client ใช้ได้ (แสดงในคอลัมน์ Dialect):
Get-SmbConnection
โดยค่าเริ่มต้น การเข้ารหัส SMB Traffice ปิดอยู่บน Windows Server 2012 File Server สามารถเปิดใช้งานได้ทั้งต่อ Share เฉพาะหรือทุก SMB Connections
เปิดใช้งานการเข้ารหัสสำหรับ Share เฉพาะ
เปิดคอนโซล Server Manager ไปที่ File and Storage Services → Shares เลือก Shared Folder ที่ต้องการ → Properties → แท็บ Settings → เปิด Encrypt Data Access → บันทึก
เปิดใช้งานผ่าน PowerShell
เปิดใช้งานสำหรับ Share เดียว:
Set-SmbShare –Name Install -EncryptData $true
หรือสำหรับทุก SMB Connections ไปยังเซิร์ฟเวอร์ (Shared Folders หรือ Administrative Shares):
Set-SmbServerConfiguration –EncryptData $true
หลังเปิดใช้งาน SMB Encryption สำหรับ Network Share Client รุ่นเก่า (ก่อน Windows 8) จะเชื่อมต่อ Share นี้ไม่ได้ เนื่องจากไม่รองรับ SMB 3.0 หากต้องการอนุญาตให้ Client เหล่านี้เข้าถึงได้ (โดยปกติเป็นการเข้าถึงชั่วคราว มิฉะนั้นการเปิด Encryption ไม่มีความหมาย) สามารถอนุญาตการเชื่อมต่อโดยไม่เข้ารหัสได้:
Set-SmbServerConfiguration –RejectUnencryptedAccess $false
Tip หลังเปิดโหมดนี้ Client ที่เชื่อมต่ออาจสลับไปใช้ SMB 1.0 ที่ล้าสมัยและไม่ปลอดภัย (ใน Windows Server 2012 R2 SMB 1.0 ปิดโดยค่าเริ่มต้น) เพื่อความปลอดภัยบางส่วน ควรปิดการรองรับ SMB 1.0:
Set-SmbServerConfiguration –EnableSMB1Protocol $false