JAVA通過SSL證書創建MS AD賬戶及設置密碼

近期由于工作需要整理一下自動化的東西,因為公司去年上線了OA,所以公司的入職系統會提交用戶的信息到IT部門,最早的做法是入職到了,IT部門收集用戶信息在AD中創建對應的用戶信息,所以為了提高管理員的工作效率,所以準備實施自動創建AD賬戶,當OA流程到IT人員審批節點后,IT人員審批后根據人員信息自動創建AD賬戶,所以整理了一些JAVA創建AD人員信息的信息,但是我們需要注意點的是,對于JAVA語言操作MS AD的一些普通操作是不需要SSL的,但是對于用戶密碼的重置操作必須使用SSL,當然之前看網上有說可以跳過的,但是沒有試驗成功,所以還是按照標準的配置來通過SSL對用戶的AD密碼進行操作,廢話不多說了,今天我們主要介紹使用JAVA通過SSL方式創建MS AD賬戶,因為要對創建的用戶設置密碼,所以需要使用SSL證書,既然需要SSL證書,目的就是為了讓JAVA信任LDAP,所以我們需要從AD中導出受信任的證書,然后導入到JAVA運行環境中的JRE下的cacert證書文件中。我們既然說到了OA,其實OA中就可以通過系統自帶的功能進行證書申請及證書導入,這樣比較簡單;當然如果沒有OA環境的,我們可以通過JAVA運行環境中的JDK中的keytool進行證書導入工作,我們下面都會介紹到;

我們首先使用OA中的功能進行證書導入;我們OA中的證書路勁在/OAFS/WEAVER/jdk1.8.0_101/jre/lib/security/cacerts

image

確認OA環境中的JDK路勁后,我們接下來就是證書申請及導入了;

我們訪問OA的地址,然后路勁增加/integration/ldapcert.jsp路勁訪問即可;如果沒有后面的JAVA文件可以找OA供應商要;或者在附件下載;

我們首先下載附件中的文件,下載后,附件中有三個文件;classbean、

我們首先進入classbean文件夾內的內容拷貝到對應的OA服務器的對應目錄;

ecology\classbean\weaver\ldap

2.然后將解壓文件中的文件夾integration文件中的以下文件拷貝到OA的對應的服務器目錄下:

ecology\integration

3.因為解壓后有三個文件夾,第三個文件夾src為源碼,我們就不用管了

按照以上方法走完后,我們就可以通過以下鏈接來配置了

http://192.168.6.101/integration/ldapcert.jsp

訪問后,我們再LDAP IP輸入環境的AD DC服務器地址,系統會默認填寫LDAP端口636,及證書路勁,這些信息系統會自動補全;我們需要手動設置證書密碼,一般我們都會設置成changeit,設置好這些信息后,我們導入證書,會提示下面的導入信息;

image

導入完成

image

然后我們需要在證書路勁下載證書到本地的JRE環境進行測試了

image

接著我們看看第二種方式的證書申請;

我們需要從DC上導入域的根證書

mmc---增加---證書---計算機---個人---選擇根證書----導出

image

不需要導出私鑰

image

使用默認的DRE編碼

image

保存

image

我們按照同樣的方式,將另外一張也導出來

image

然后我們需要在本地的JDK環境中導入該根證書到JDK環境中的證書中;

我本地的JDK環境路勁D:\Development_Environment\java\jdk\jre\lib\security

image

然后運行命令將剛才導出的根證書導入到該路勁的cacert證書文件中;

我們首先要cd到jdk路勁

1
cd?D:\Development_Environment\java\jdk\jre\bin

然后將剛才導出的根證書保存到D盤下,通過以下命令導入

1
keytool?keytool?-import?-keystore????D:\Development_Environment\java\jdk\jre\lib\security\cacerts?-storepass?changeit?-keypass?changeit?-alias?CA?-file?d:\ADroot.cer

image

輸入Y受信任

image

然后我們就可以通過

接著就是看看ADDS環境了

image

換進準備好,我們就可以上代碼了;

我們設置好證書路勁,及LDAP驗證信息,及需要注冊的用戶名

image

賬戶注冊成功

image

上代碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package?com.ixmsoft.oa.util;???
???
import?java.util.Properties;???
???
import?javax.naming.*;???
import?javax.naming.ldap.*;???
import?javax.naming.directory.*;???
???
/**??
?*?@author?Keven?Chen??
?*?@version?$Revision?1.0?$??
?*???
?*/??
public?class?AddAdUser?{???
????private?static?final?String?SUN_JNDI_PROVIDER?=?"com.sun.jndi.ldap.LdapCtxFactory";???
???
????public?static?void?main(String[]?args)?throws?Exception?{???
????????String?keystore?=?"D:\\Development_Environment\\java\\jdk\\jre\\lib\\security\\cacerts";???
????????System.setProperty("javax.net.ssl.trustStore",?keystore);???
???
????????Properties?env?=?new?Properties();???
???
????????env.put(Context.INITIAL_CONTEXT_FACTORY,?SUN_JNDI_PROVIDER);//?java.naming.factory.initial???
????????env.put(Context.PROVIDER_URL,?"ldap://192.168.5.20:636");//?java.naming.provider.url???
????????env.put(Context.SECURITY_AUTHENTICATION,?"simple");//?java.naming.security.authentication???
????????env.put(Context.SECURITY_PRINCIPAL,???
????????????????"cn=Administrator,cn=Users,dc=ixmsoft,dc=com");//?java.naming.security.principal???
????????env.put(Context.SECURITY_CREDENTIALS,?"123");//?java.naming.security.credentials???
????????env.put(Context.SECURITY_PROTOCOL,?"ssl");???
???
????????String?userName?=?"CN=gaowenlong,OU=IXM?Adm,OU=IMXSOFT?Users,DC=ixmsoft,DC=com";???
????????String?groupName?=?"CN=Domain?Admins,CN=Users,DC=ixmsoft,DC=com";???
???
????????LdapContext?ctx?=?new?InitialLdapContext(env,?null);???
???
????????//?Create?attributes?to?be?associated?with?the?new?user???
????????Attributes?attrs?=?new?BasicAttributes(true);???
???
????????//?These?are?the?mandatory?attributes?for?a?user?object???
????????//?Note?that?Win2K3?will?automagically?create?a?random???
????????//?samAccountName?if?it?is?not?present.?(Win2K?does?not)???
????????attrs.put("objectClass",?"user");???
????????attrs.put("sAMAccountName",?"gaowenlong");???
????????attrs.put("cn",?"gaowenlong");???
???
????????//?These?are?some?optional?(but?useful)?attributes???
????????attrs.put("sn",?"gaowenlong");???
????????attrs.put("displayName",?"gaowenlong");???
????????attrs.put("description",?"gaowenlong");???
????????attrs.put("userPrincipalName",?"gaowenlong@ixmsoft.com");???
????????attrs.put("mail",?"gaowenlong@ixmsoft.com");???
????????attrs.put("telephoneNumber",?"1234568999");???
???
????????//?some?useful?constants?from?lmaccess.h???
????????int?UF_ACCOUNTDISABLE?=?0x0002;??//禁用賬戶?
????????int?UF_PASSWD_NOTREQD?=?0x0020;???//用戶不能修改密碼
????????int?UF_PASSWD_CANT_CHANGE?=?0x0040;???
????????int?UF_NORMAL_ACCOUNT?=?0x0200;???//正常用戶
????????int?UF_DONT_EXPIRE_PASSWD?=?0x10000;???//密碼永不過期
????????int?UF_PASSWORD_EXPIRED?=?0x800000;???//密碼已經過期
???
????????//?Note?that?you?need?to?create?the?user?object?before?you?can???
????????//?set?the?password.?Therefore?as?the?user?is?created?with?no???
????????//?password,?user?AccountControl?must?be?set?to?the?following???
????????//?otherwise?the?Win2K3?password?filter?will?return?error?53???
????????//?unwilling?to?perform.???
???
????????attrs.put("userAccountControl",?Integer.toString(UF_NORMAL_ACCOUNT???
????????????????+?UF_PASSWD_NOTREQD?+?UF_PASSWORD_EXPIRED?+?UF_ACCOUNTDISABLE));???
???
????????//?Create?the?context???
????????Context?result?=?ctx.createSubcontext(userName,?attrs);???
????????System.out.println("Created?disabled?account?for:?"?+?userName);???
???
????????ModificationItem[]?mods?=?new?ModificationItem[2];???
???
????????//?Replace?the?"unicdodePwd"?attribute?with?a?new?value???
????????//?Password?must?be?both?Unicode?and?a?quoted?string???
????????String?newQuotedPassword?=?"\"Password2000\"";???
????????byte[]?newUnicodePassword?=?newQuotedPassword.getBytes("UTF-16LE");???
???
????????mods[0]?=?new?ModificationItem(DirContext.REPLACE_ATTRIBUTE,???
????????????????new?BasicAttribute("unicodePwd",?newUnicodePassword));???
????????mods[1]?=?new?ModificationItem(DirContext.REPLACE_ATTRIBUTE,???
????????????????new?BasicAttribute("userAccountControl",?Integer???
????????????????????????.toString(UF_NORMAL_ACCOUNT?+?UF_PASSWORD_EXPIRED)));???
???
????????//?Perform?the?update???
????????ctx.modifyAttributes(userName,?mods);???
????????System.out.println("Set?password?&?updated?userccountControl");???
????????//?now?add?the?user?to?a?group.???
???
????????try?{???
????????????ModificationItem?member[]?=?new?ModificationItem[1];???
????????????member[0]?=?new?ModificationItem(DirContext.ADD_ATTRIBUTE,???
????????????????????new?BasicAttribute("member",?userName));???
???
????????????ctx.modifyAttributes(groupName,?member);???
????????????System.out.println("Added?user?to?group:?"?+?groupName);???
???
????????}?catch?(NamingException?e)?{???
????????????System.err.println("Problem?adding?user?to?group:?"?+?e);???
????????}???
????????//?Could?have?put?tls.close()?prior?to?the?group?modification???
????????//?but?it?seems?to?screw?up?the?connection?or?context?????
???
????????ctx.close();???
???
????????System.out.println("Successfully?created?User:?"?+?userName);???
???
????}???
???
}

我們查看

image

查看賬戶屬性

image

然后查看屬性

image

image

我們將java文件上傳到附件中,如果加在eclipse中有報錯,請根據錯誤提示,右擊導入ldap相關的包即可,



本文轉自 高文龍 51CTO博客,原文鏈接:http://blog.51cto.com/gaowenlong/1969585,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/539988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/539988.shtml
英文地址,請注明出處:http://en.pswp.cn/news/539988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 實體類規范_實體類的規范

1.Boolean類型1.1.使用Boolean類型,而不是Byte類型1.2.數據庫字段名使用is_開頭1.3.實體類字段名不使用is開頭例子/*** 是否為新消息*/Column(name "is_new_message", nullable false)private Boolean newMessage;2.Enum類型1.使用Convert注解, 并指定coverter類例…

01電話撥號器

實例非常簡單,意在體驗Android的Intent,用戶權限。 Intent 見 http://blog.csdn.net/zengmingen/article/details/49586045 用戶權限 見 http://blog.csdn.net/zengmingen/article/details/49586569 --------------------------------------------------…

微信小程序筆記六模塊化 —— module.exports

微信小程序中所有 js 文件作用域皆為獨立的,每一個 js 文件即為一個模塊。模塊與模塊之間的引用通過 module.exports 或 exports 對外暴露接口。 注意: exports 是 module.exports 的一個引用,因此在模塊里邊隨意更改 exports 的指向會造成未…

java常用的統計_(OJ)Java常用類-統計數字次數

統計數字次數Problem Description命令行輸入一個由數字組成的任意字符串,統計出每個數字出現的次數。Input Description1239586838Output Description0 counts:01 counts:12 counts:13 counts:24 counts:05 counts:16 counts:17 counts:08 counts:39 counts:1解題代碼import ja…

02發送短信

使用SmsManager發送短信java.lang.Object ?android.telephony.SmsManagerManages SMS operations such as sending data, text, and pdu SMS messages. Get this object by calling the static method SmsManager.getDefault().管理短信操作,如發送數據&#xff…

Python運行環境與異常處理

Python的命令格式: python [option] ... [-c cmd | -m mod | file | -] [arg] ... 選項描述-J 啟動將從Python3中刪除或更改某些功能的警告 -B阻止在導入時創建.pyc或.pyo文件-E忽略環境變量-h打印所有可用命令行選項的列表-i在程序執行后進入交互模式-m module以腳…

Java應用一般架構

原文鏈接:http://www.iteye.com/news/31115 當我們架設一個系統的時候通常需要考慮到如何與其他系統交互,所以我們首先需要知道各種系統之間是如何交互的,使用何種技術實現。 1. 不同系統不同語言之間的交互 現在我們常見的不同系統不同語…

Mac MongoDB未正常關閉導致重啟失敗

你可以刪除掉mongod.lock文件,然后重新啟動,如果還是不可以,你可以查看一下進程,然后殺掉: ps -aef | grep mongo sudo kill 1076 再重啟數據庫即可。

微信企業號讓IOS不要識別數字為電話號碼的方法

最近在開發一個聯系人查看功能時,發現IOS端把 8位,11位的數字識別為了 電話號碼。 本來是黑色的樣式,變成了藍色的樣式,還添加了下劃線。點擊一下,還可以撥打電話。 這個問題要改,解決方法很簡單&#xf…

powerdns與nginx結合實現以域名和IP方式訪問web服務器80端口時分別跳轉到不同頁面...

1.powerdns設置 2.內部網站介紹 web服務器采用nginx,內網dns采用powerdns. 想實現的功能如下 通過ip訪問時跳轉到A頁面,通過域名訪問時,讓其跳轉到B頁面。兩種方式的端口均為80. 頁面A對應的nginx配置 server { listen 80; …

Installation error code: -103簽名不一致錯誤

調用Android系統的PackageInstallerActivity進行app安裝時,報Installation error code: -103 錯誤。 原因是:簽名問題。 可能是 1、正安裝的應用沒用簽名 2、正安裝的應用與已安裝的應用包相同,但簽名不同。 解決方法: 1、給…

java代碼塊是對象嗎_面向對象(Java中普通代碼塊,構造代碼塊,靜態代碼塊區別及代碼示例)...

//靜態代碼塊:在java中使用static關鍵字聲明的代碼塊。靜態塊用于初始化類,為類的屬性初始化。每個靜態代碼塊只會執行一次。由于JVM在加載類時會執行靜態代碼塊,所以靜態代碼塊先于主方法執行。//如果類中包含多個靜態代碼塊,那么將按照&quo…

Android adb命令選擇設備操作

當開了多個模擬器時,安裝app需要指定虛擬機,否則會提示:error: more than one device and emulator 1、先adb devices 查看設備列表 List of devices attached emulator-5554 device emulator-5556 device 2、使用命令 adb -s emulat…

java 視圖解析器_SpringMVC——視圖和視圖解析器

請求處理方法執行完成后,最終返回一個 ModelAndView對象。對于那些返回 String,View 或 ModeMap 等類型的處理方法,Spring MVC 也會在內部將它們裝配成一個ModelAndView 對象,它包含了邏輯名和模型對象的視圖Spring MVC 借助視圖解…

Android app 應用簽名

為什么要簽名? 這個要從Android的系統設計來解釋。 ---Android系統中的每個應用都是一個用戶,應用的包名(清單文件中 package的值)就是用戶名。 當一個已安裝的應用A和一個正要安裝的應用B,它們的包名相同&#xff…

[.Net線程處理系列]專題五:線程同步——事件構造

引言: 其實這部分內容應該是屬于專題四,因為這篇也是講關于線程同步的,但是由于考慮到用戶的閱讀習慣問題,因為文章太長了,很多人不是很愿意看包括我也是這樣的,同時也有和我說可以把代碼弄成折疊的&#x…

java redis set list_RedisTemplate的各種操作(set、hash、list、string)_lichuangcsdn的博客-CSDN博客...

注入以下RedisTemplateAutowiredprivate RedisTemplate redisTemplate;1、保存和讀取Set:代碼示例:SetOperations set redisTemplate.opsForSet(); set.add("set1","22"); set.add("set1","33"); set.add(&quo…

閃屏頁面(Splash)開發

業余作品--365安全衛士 ------------------------------------------- 閃屏頁面(Splash):app剛啟動時的頁面 作用: 1、展示公司品牌logo 2、應用初始化。如游戲app第一次啟動初始化數據 3、檢測新版本。 4、檢測程序合法性。如 招商銀行app在啟動…

matlab2016b ubuntu命令行安裝 + matconvnet的安裝

0. 下載安裝包 下載的文件有Matlab 2016b Linux64 Crack.rar,R2016b_glnxa64_dvd2.iso,R2016b_glnxa64_dvd1.iso。 1. 拷貝安裝文件并上傳服務器 在Windows下用虛擬光驅打開,并將R2016b_glnxa64_dvd1.iso和R2016b_glnxa64_dvd2.iso所有內容復…

科普dip,dp,sp,dpi,ppi,px,Density

一、概念 DPI:DPI是Dots Per Inch的縮寫,也就是“每英寸點數”,打印機分辨率。這里所說的“點”,在屏幕上并不是不變的,并不是唯一對應屏幕上的像素點,而是受到分辨率等因素的影響。這個點有可能是1個像素…