[mongo] [security] 9.3.3 身份驗證方式(Authentication Mechanisms)【未完】
注意

從版本4.0開始,MongoDB取消了對不推薦使用的MongoDB質詢響應(MongoDB-CR)身份驗證機制的支持。
MongoDB支持以下身份驗證機制:
SCRAM(默認)
x.509證書認證。
另外,MongoDB Enterprise提供了與許多外部身份驗證機制的集成,包括Kerberos和LDAP。有關MongoDB Enterprise支持的其他身份驗證機制,請參閱?企業身份驗證機制。
默認的身份驗證機制
從MongoDB 3.0開始,?Salted Challenge Response Authentication Mechanism(SCRAM)是MongoDB的默認身份驗證機制。
指定認證機制
要指定要使用的身份驗證機制,請authenticationMechanisms? 為mongod? 和 設置 參數? mongos。
客戶端在? db.auth()? 方法中指定身份驗證機制。對于? mongo? Shell? 和? MongoDB? 工具,您還可以從命令行指定身份驗證機制。
SCRAM
注意
從版本4.0開始,MongoDB刪除了對Challenge-Response ? (MONGODB-CR)?? 身份驗證機制的支持。
如果您的部署中有用戶憑據存儲在? MONGODB-CR ? 架構中,則必須先升級到SCRAM,然后再升級到4.0版。有關升級到SCRAM的信息 SCRAM,請參閱?升級到SCRAM。
SCRAM是MongoDB的默認身份驗證機制。SCRAM基于IETF?RFC 5802標準,該標準定義了實現挑戰響應(challenge-response) 機制的最佳實踐,用密碼對用戶進行身份驗證。
使用SCRAM,MongoDB根據用戶名、密碼和身份驗證數據庫驗證提供的用戶憑據。身份驗證數據庫是創建用戶的數據庫,與用戶名一起用于標識用戶。
功能
MongoDB的SCRAM實現提供:
可調整的工作因子(即迭代次數),
每位使用者的隨機salts,以及
服務器與客戶端相互身份驗證。
SCRAM機制
MongoDB支持以下SCRAM機制:
使用SHA-1哈希函數。
要修改其迭代計數SCRAM-SHA-1,請參見?scramIterationCount。
使用SHA-256哈希函數,并要求featureCompatibilityVersion(fcv)設置為4.0。
要修改其迭代計數SCRAM-SHA-256,請參見?scramSHA256IterationCount。
版本4.0中的新功能。
創建或更新SCRAM用戶時,您可以指定SCRAM機制,也可以指定服務器還是客戶端提取密碼。使用SCRAM-SHA-256時,MongoDB需要服務器端密碼哈希,即服務器提取密碼。有關詳細信息,請參見? db.createUser()和? db.updateUser()。
驅動程序支持
要使用SCRAM,如果當前驅動程序版本不支持,則必須升級驅動程序? SCRAM。
支持的最低驅動程序版本? SCRAM? 為:
其他信息
博客文章:MongoDB 3.0中基于密碼的身份驗證的改進:SCRAM解讀(第1部分)
博客文章:MongoDB 3.0中基于密碼的身份驗證的改進:SCRAM解讀(第2部分)
x.509
MongoDB支持x.509證書身份驗證,用于客戶端身份驗證以及副本集和分片群集成員的內部身份驗證。
x.509證書身份驗證需要安全的TLS / SSL連接。
注意
從版本4.0開始,MongoDB在可用TLS 1.1+的系統上禁用對TLS 1.0加密的支持。有關更多詳細信息,請參閱禁用TLS 1.0。
證書頒發機構
對于生產用途,您的MongoDB部署應使用由單個證書頒發機構生成和簽名的有效證書。您或您的組織可以生成和維護獨立的證書頒發機構,或者使用第三方TLS / SSL供應商生成的證書。獲取和管理證書超出了本文檔的范圍。
客戶端x.509證書
若要向服務器進行身份驗證,客戶端可以使用x.509證書代替用戶名和密碼。
客戶證書要求
客戶端證書必須具有以下屬性:
證書頒發機構(CA)必須同時為客戶端和服務器頒發證書。
客戶端證書必須包含以下字段:
keyUsage = digitalSignature extendedKeyUsage = clientAuth
每個唯一的MongoDB用戶必須具有唯一的證書。
客戶端X.509證書的主題,其中包含了專有名稱(DN),必須區別 成員X.509證書。
客戶端證書中的組織(O),組織單位(OU)或域組件(DC)屬性至少必須與net.tls.clusterFile和?net.tls.certificateKeyFile服務器證書中的屬性不同?。
如果MongoDB部署設置了tlsX509ClusterAuthDNOverride(從MongoDB 4.2開始可用),則客戶端x.509證書的主題也必須與此值不同。
警告
如果客戶端x.509證書的主題與成員x.509證書具有相同的O、OU和DC組合(如果設置了tlsX509ClusterAuthDNOverride),則會拒絕客戶端連接。只有群集成員x509證書應使用相同的O、OU和DC組合,因為這將授予完全權限。
x.509證書一定不可 過期。
在4.4版本有改變:
如果提供的x.509證書在mongod/mongos主機系統時間的30天內過期,mongod/mongos會在連接時記錄警告。有關詳細信息,請參閱x.509 Certificates Nearing Expiry Trigger Warnings。
MongoDB的用戶和? $external? 數據庫
要使用客戶端證書進行身份驗證,必須首先將客戶端證書中的subject的值添加MongoDB用戶。每個唯一的x.509客戶端證書對應于一個MongoDB用戶;即,不能使用單個客戶端證書對多個MongoDB用戶進行身份驗證。
在$external數據庫中添加用戶;即?認證數據庫是$external數據庫
在版本3.6.3中更改:要與$external身份驗證用戶(即Kerberos,LDAP,x.509用戶)一起使用會話,用戶名不能大于10k字節。
驗證
要使用x.509客戶端證書進行連接和身份驗證,請執行以下操作:
對于MongoDB 4.2或更高版本,請為客戶端包括以下選項:
--tls(或不建議使用的--ssl選項)
--tlsCertificateKeyFile?(或不建議使用的--sslPEMKeyFile選項)
--tlsCertificateKeyFilePassword?(或不建議使用的--sslPEMKeyPassword選項)如果證書密鑰文件已加密
--authenticationDatabase?'$external'
--authenticationMechanism?MONGODB-X509
對于MongoDB 4.0和更早版本,為客戶端包括以下選項:
--ssl
--sslPEMKeyFile
--sslPEMKeyPassword如果--sslPEMKeyFile加密,則為選項。
--authenticationDatabase?'$external'
--authenticationMechanism?MONGODB-X509
您還可以先建立TLS / SSL連接,然后db.auth()在$external數據庫中使用?它進行身份驗證。
有關兩種情況的示例,請參閱使用x.509證書對客戶端進行身份驗證?中的使用x.509證書進行身份驗證(使用tls選項)部分。
成員x.509證書? (Member x.509 Certificates)
對于內部身份驗證,分片群集和副本集的成員可以使用x.509證書代替使用SCRAM身份驗證機制的?密鑰文件。
成員證書要求
用于驗證分片群集或副本集成員身份的成員證書(net.tls.clusterFile,如果指定,則為net.tls.certificateKeyFile)必須具有以下屬性:
單個證書頒發機構(CA)必須為分片群集或副本集的成員頒發所有x.509證書。
在成員證書的主題中找到的可分辨名稱(DN)必須為以下至少一個屬性指定非空值:組織(O)、組織單位(OU)或域組件(DC)。
組織屬性(O's)、組織單元屬性(OU's)和域組件(DC's)必須與來自這兩個域的屬性匹配net.tls.clusterFile文件以及net.tls.certificateKey文件其他集群成員的證書(或tlsX509ClusterAuthDNOverride值,如果已設置)。
要匹配,證書必須匹配這些屬性的所有規范,甚至這些屬性的非規范。屬性的順序并不重要。?? 在下面的示例中,這兩個DN包含O、OU的匹配規范以及DC屬性的非規范。
CN = host1,OU = Dept1,O = MongoDB,ST = NY,C = US C = US,ST = CA,O = MongoDB,OU = Dept1,CN = host2
以下兩個DN 包含不匹配的?OU 屬性,因為一個包含兩個 OU 規范,另一個包含一個規范。
CN=host1,OU=Dept1,OU=Sales,O=MongoDB CN=host2,OU=Dept1,O=MongoDB
通用名(CN)或主可選擇名(SAN)之一必須與服務器的主機名匹配,該主機名由集群的其他成員使用。從MongoDB 4.2開始,在執行SAN比較時,MongoDB支持DNS名稱或IP地址的比較。在以前的版本中,MongoDB僅支持DNS名稱的比較。
例如,群集的證書可以具有以下主題:
subject= CN=
如果證書包含擴展密鑰用法(extendedKeyUsage)設置,則該值必須包含clientAuth(“ TLS Web客戶端身份驗證”)。
extendedKeyUsage = clientAuth
您還可以使用不包含擴展密鑰用法(EKU)的證書。
x.509證書不得過期。
在4.4版本改變:如果提供的x.509證書在mongod/mongos主機系統時間的30天內過期,mongod/mongos會在連接時記錄警告。有關詳細信息,請參閱x.509證書接近到期觸發警告。
MongoDB成員身份驗證配置
除了適用于部署的任何TLS/SSL配置之外,還包括以下配置,以便為副本集(即mongod實例)或分片集群(即mongod和mongos實例)的每個成員指定x.509進行內部身份驗證:
Security.clusterAuthMode或--clusterAuthMode設置為x509
net.tls.clusterFile或--tlsClusterFile(在MongoDB 4.2中都是新功能)
但是,如果未指定群集文件,則成員可以使用中指定的證書密鑰文件net.tls.certificateKey文件或者--tlsCertificateKeyFile(都是MongoDB 4.2中新增的),用于成員身份驗證。mongod(和mongos)實例使用此證書密鑰文件向客戶端證明其身份,但也可以用于成員身份驗證。要同時用于客戶端身份驗證和成員身份驗證,證書必須:
省略extendedKeyUsage或
指定extendedKeyUsage值
注意
盡管仍然可用,net.ssl.clusterFile文件(以及相應的--sslClusterFile)和net.ssl.PEMKeyFile文件(以及相應的--sslPEMKeyFile)在MongoDB 4.2中被棄用。
對于使用MongoDB 4.0版及更早版本的部署,請使用net.ssl.clusterFile文件(或相應的--sslClusterFile)和net.ssl.PEMKeyFile文件(或相應的--sslPEMKeyFile)。
x.509證書不得過期。
在4.4版本改變:如果提供的x.509證書在mongod/mongos主機系統時間的30天內過期,mongod/mongos會在連接時記錄警告。有關詳細信息,請參閱x.509證書接近到期觸發警告。
MongoDB 云數據庫 GaussDB(for Mongo) 數據庫
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。