2014-02-05 83 views
0

我有一個集中式用戶數據庫的系統,用戶名和密碼存儲在不同的應用程序中。 數據庫在PostgreSQL中創建。 FreeRDAIUS通過使用PostgreSQL作爲後端系統的OpenLDAP訪問用戶和密碼。密碼應該以其散列格式存儲。 我已經測試了FreeRADIUS和存儲在數據庫中的SHA1密碼,並且用戶被成功驗證。我將{SHA}摘要存儲到摘要中,並且完美地工作。然而,這個散列需要在base64中用「=」作爲填充字符。我使用ldap工具slappasswd生成了base64哈希摘要。因爲在現實中,我應該使用C函數將用戶插入到數據庫中,而像OpenSSL這樣的可用加密庫只提供了十六進制散列函數,我認爲最好的方法是知道如何告訴FreeRDAIUS存儲在數據庫中的摘要不是base64,而是HEX。在PostgreSQL中存儲FreeRADIUS用戶密碼的SHA1哈希摘要

有誰知道我該怎麼做?看起來,如果我只是在散列值之前放置{SHA},它只適用於FreeRADIUS的base64。我也想知道FreeRADIUS是否支持其他散列算法,如SHA256。

操作系統:Ubuntu的LTS 12.04 PostgreSQL的 :9.1 FreeRADIUS的:2.1.10

回答

0

沒有目前發佈的版本支持任何的SHA-2的散列算法。

FreeRADIUS 2.1.10中的rlm_pap模塊應該自動'規範''已知好'密碼,即將hexits轉換爲二進制,並將其分配給正確的control:屬性。這對hexits和base64是一樣的。

更新: https://github.com/FreeRADIUS/freeradius-server/commit/0bd0f7453adb2c331a9c1127eda9c9a9fe203b2d

+0

謝謝你的答案,但它似乎並不認爲它接受SHA1六角消化。正如我所說的,它與BASE64完美配合,用radtest進行用戶認證是成功的。我需要修改RADIUS服務器中的參數嗎? – alibaba

+0

不,在rlm_pap中沒有有用的參數,除了'auto_header'應該是'yes',''encryption_scheme''應該''auto'以外的那個版本的服務器。確保你沒有在十六進制字符串前加'0x',十六進制字符串沒有被截斷,沒有空格,並且你的十六進制字符串正好包含40個hexits。 –