??xml version="1.0" encoding="utf-8" standalone="yes"?> CAPICOM_ACTIVE_DIRECTORY_USER_STORE 3 得到AD上已l发布的证书 目前Q?/span>CAPICOM共有两个版本Q?/span>1.0版和 2.0版。其中,后者在前者的基础上,提供?jin)一些额外的功能?/span> CAPICOM v1.0提供如下功能Q?/span> 1?span style="font-family: ?hu)?">产生和验?/span>PKCS#7格式的数字签名; 2?span style="font-family: ?hu)?">使用证书加密 public void createKeyStore() {
try {
KeyGenerator keyGen = KeyGenerator.getInstance("DES");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");
keyGen.init(56, random);
SecretKey secretKey = keyGen.generateKey();
KeyStore ks = KeyStore.getInstance("jceks");
char password[] = {'c', 'h', 'a', 'n', 'g', 'e','i','t' };
// Create an empty keystore
ks.load(null, password);
KeyStore.SecretKeyEntry skEntry = new KeyStore.SecretKeyEntry(secretKey);
ks.setEntry("myKey", skEntry, new KeyStore.PasswordProtection(password));
// store away the keystore
java.io.FileOutputStream fos =
new java.io.FileOutputStream("mystore");
ks.store(fos, password);
fos.close();
} catch (NoSuchAlgorithmException nsaex) {
nsaex.printStackTrace(System.err);
} catch (NoSuchProviderException nspex) {
nspex.printStackTrace(System.err);
} catch (KeyStoreException ksex) {
ksex.printStackTrace(System.err);
} catch (CertificateException cex) {
cex.printStackTrace(System.err);
} catch (IOException ioex) {
ioex.printStackTrace(System.err);
}
}
上面的例子是存(sh)个DES密钥?br />
需要注意的是q个keystore的类型,必须是jceksQ?br />
之前我就是用默认的jksQ导致报错?
]]>
capicom是一个对windows来讲非常重要的CryptoAPI.
通过capicom你可以在你的应用中集成Public Key Infrastructure (PKI)功能:获取证书?利用服务器证书签?加密数据.
通过vbscript你可以轻杄调用?当然,前提是你已经安装?jin)capicom.dll.
注册capicom.dll,打开cmd,转到capicom.dll目录?执行:regsvr32 capicom.dll.(当然你也可以自己做个.msi来安?
之后你就可以用各U脚本调用它的强大功能了(jin)
以vbscriptZ:
拿到当前用户的数字证?br />
Const CAPICOM_MY_STORE = "My"
Const CAPICOM_CURRENT_USER_STORE = 2
Const CAPICOM_STORE_OPEN_READ_ONLY = 0
Dim oCert, oStore
Set oStore = CreateObject ("CAPICOM.Store")
if Err.Number <> 0 Then
wscript.echo "CAPICOM NOT detected"
Wscript.Quit(1)
End if
oStore.Open CAPICOM_CURRENT_USER_STORE, CAPICOM_MY_STORE, CAPICOM_STORE_OPEN_READ_ONLY
For Each oCert in oStore.Certificates
WScript.Echo " Subject Name: " & oCert.SubjectName
WScript.Echo " Issuer Name: " & oCert.IssuerName
WScript.Echo " SHA-1 Thumbprint: " & oCert.Thumbprint
WScript.Echo " Serial Number: " & oCert.SerialNumber
WScript.Echo " Version: " & oCert.Version
WScript.Echo " Valid From: " & oCert.ValidFromDate
WScript.Echo " Valid To: " & oCert.ValidToDate
Next
上面q段代码是得到?jin)当前用L(fng)所有数字证?
当然你也可以得当前机器上?AD上的{?
store = CreateObject ("CAPICOM.Store")返回一个证书库.
可利用这个store的open()Ҏ(gu)得到相应证书库及(qing)其中的证?
.open ()语法?
.open(StoreLocation , StoreName , OpenMode)
StoreLocation :
CAPICOM_CURRENT_USER_STORE 2 得到当前用户的证?br />
CAPICOM_LOCAL_MACHINE_STORE 1 得到本地机器上的证书
CAPICOM_MEMORY_STORE 0 得到内存?sh)的证?br />
StoreName :
CAPICOM_MY_STORE "MY" 得到当前用户证书与CAPICOM_CURRENT_USER_STORE配合使用
"CN=your user name on domain" 得到指定用户的证?一般与CAPICOM_ACTIVE_DIRECTORY_USER_STORE配合使用.
OpenMode:
CAPICOM_STORE_OPEN_READ_ONLY 0 只读Ҏ(gu)
l常易出错的地方?以上q些帔R在vbscript中ƈ没被预定?使用前要自己定义一?其值就是后面相应的数字.
之前我就是以此常量是VBS预定义了(jin),所以直接用,D操作不成?费?jin)大量时间去扑֎?
当然,你也可以直接用相应数字代替这此常?
?jin)解更多请参?
http://msdn.microsoft.com/en-us/library/aa388130.aspx
http://207.46.196.114/windowsserver/en/library/8f918fdc-9841-48f9-a46d-28232742239a1033.mspx?mfr=true
]]>INTRODUCTION
If you are running Windows Server
2003, you can modify Kerberos parameters to help troubleshoot Kerberos
authentication issues or to test the Kerberos protocol. To do this, add or
modify the registry entries that are listed in the "More Information"
section.
MORE INFORMATION
Important
This section, method, or task contains steps that tell you how to
modify the registry. However, serious problems might occur if you
modify the registry incorrectly. Therefore, make sure that you follow
these steps carefully. For added protection, back up the registry
before you modify it. Then, you can restore the registry if a problem
occurs. For more information about how to back up and restore the
registry, click the following article number to view the article in the
Microsoft Knowledge Base:
Registry entries and values under the Parameters key
The registry entries that are listed in this section must be added
to the following registry subkey:
•
Entry: SkewTime
Type: REG_DWORD
Default Value: 5
(minutes)
This value is the maximum time difference that is permitted
between the client computer and the server that accepts Kerberos
authentication. In Windows 2000 checked build version, the default SkewTime
value is 2 hours.
Note A checked build version of the Windows operating system is used
in production and testing environments. (A checked build is also known as a
debug version.) A checked build has many compiler optimizations turned off.
This kind of build helps trace the cause of problems in system software. A
checked build turns on many debugging checks in the operating system code and
in the system drivers. These debugging checks help the checked build identify
internal inconsistencies as soon as they occur. A checked build is larger and
is slower to run than an end-user version of Windows.
An end-user
version of Windows is also known as a free build version or a retail-build
version. In a free build version, debugging information is removed, and Windows
is built with full compiler optimizations. A free build version is faster and
uses less memory than a checked build version.
•
Entry: LogLevel
Type: REG_DWORD
Default Value: 0
This value indicates whether events are logged in the system event
log. If this value is set to any non-zero value, all Kerberos-related events
are logged in the system event log.
•
Entry: MaxPacketSize
Type: REG_DWORD
Default
Value: 1465 (bytes)
This value is the maximum User Datagram Protocol
(UDP) packet size. If the packet size exceeds this value, TCP is used.
•
Entry: StartupTime
Type: REG_DWORD
Default Value:
120 (seconds)
This value is the time that Windows waits for the Key
Distribution Center (KDC) to start before Windows gives up.
•
Entry: KdcWaitTime
Type: REG_DWORD
Default Value:
10 (seconds)
This value is the time Windows waits for a response from
a KDC.
•
Entry: KdcBackoffTime
Type: REG_DWORD
Default
Value: 10 (seconds)
This value is the time between successive
calls to the KDC if the previous call failed.
•
Entry: KdcSendRetries
Type: REG_DWORD
Default
Value: 3
This value is the number of times that a client will try to
contact a KDC.
•
Entry: DefaultEncryptionType
Type: REG_DWORD
Default Value: 23 (decimal) or 0x17 (hexadecimal)
This value
indicates the default encryption type for pre-authentication.
•
Entry: FarKdcTimeout
Type: REG_DWORD
Default
Value: 10 (minutes)
This is the time-out value that is used to
invalidate a domain controller from a different site in the domain controller
cache.
•
Entry: NearKdcTimeout
Type: REG_DWORD
Default
Value: 30 (minutes)
This is the time-out value that is used to
invalidate a domain controller in the same site in the domain controller
cache.
•
Entry: StronglyEncryptDatagram
Type: REG_BOOL
Default Value: FALSE
This value contains a flag that indicates
whether to use 128-bit encryption for datagram packets.
•
Entry: MaxReferralCount
Type: REG_DWORD
Default
Value: 6
This value is the number of KDC referrals that a client
pursues before the client gives up.
•
Entry: KerbDebugLevel
Type: REG_DWORD
Default
Value: 0xFFFFFFFF
This
value is a list of flags that indicate the type and the level of
logging that is requested. This kind of logging can be collected on the
component level of Kerberos by bitwise or by one or more of the macros
that are described in the following table.
Macro Name Value Note
DEB_ERROR
0x00000001
This is the default InfoLevel for checked builds. This produces error messages across components.
DEB_WARN
0x00000002
This macro generates warning messages across components. In some cases, these messages can be ignored.
DEB_TRACE
0x00000004
This macro enables general tracing events.
DEB_TRACE_API
0x00000008
This
macro enables user API tracing events that are usually logged on entry
and on exit to an externally exported function that is implemented
through SSPI.
DEB_TRACE_CRED
0x00000010
This macro enables credentials tracing.
DEB_TRACE_CTXT
0x00000020
This macro enables context tracing.
DEB_TRACE_LSESS
0x00000040
This macro enables logon session tracing.
DEB_TRACE_TCACHE
0x00000080
Not implemented
DEB_TRACE_LOGON
0x00000100
This macro enables logon tracing such as in LsaApLogonUserEx2().
DEB_TRACE_KDC
0x00000200
This macro enables tracing before and after calls to KerbMakeKdcCall().
DEB_TRACE_CTXT2
0x00000400
This macro enables additional context tracing.
DEB_TRACE_TIME
0x00000800
This macro enables the time skew tracing that is found in Timesync.cxx.
DEB_TRACE_USER
0x00001000
This macro enables user API tracing that is used together with DEB_TRACE_API and that is found mostly in Userapi.cxx.
DEB_TRACE_LEAKS
0x00002000
DEB_TRACE_SOCK
0x00004000
This macro enables Winsock-related events.
DEB_TRACE_SPN_CACHE
0x00008000
This macro enables events that are related to SPN cache hits and misses.
DEB_S4U_ERROR
0x00010000
Not implemented
DEB_TRACE_S4U
0x00020000
DEB_TRACE_BND_CACHE
0x00040000
DEB_TRACE_LOOPBACK
0x00080000
DEB_TRACE_TKT_RENEWAL
0x00100000
DEB_TRACE_U2U
0x00200000
DEB_TRACE_LOCKS
0x01000000
DEB_USE_LOG_FILE
0x02000000
Not implemented
•
Entry: MaxTokenSize
Type: REG_DWORD
Default Value:
12000 (Decimal)
This value is the maximum value of the Kerberos
token. Microsoft recommends that you set this value to less than 65535.
•
Entry: SpnCacheTimeout
Type: REG_DWORD
Default
Value: 15 minutes
This value is the lifetime of the Service Principal
Names (SPN) cache entries. On domain controllers, the SPN cache is
disabled.
•
Entry: S4UCacheTimeout
Type: REG_DWORD
Default
Value: 15 minutes
This value is the lifetime of the S4U negative
cache entries that are used to restrict the number of S4U proxy requests from a
particular computer.
•
Entry: S4UTicketLifetime
Type: REG_DWORD
Default
Value: 15 minutes
This value is the lifetime of tickets that are
obtained by S4U proxy requests.
•
Entry: RetryPdc
Type: REG_DWORD
Default Value: 0
(false)
Possible values: 0 (false) or any non-zero value (true)
This value indicates whether the client will contact the primary
domain controller for Authentication Service Requests (AS_REQ) if the client
receives a password expiration error.
•
Entry: RequestOptions
Type: REG_DWORD
Default
Value: Any RFC 1510 value
This value indicates whether there are
additional options that must be sent as KDC options in Ticket Granting Service
requests (TGS_REQ).
•
Entry: ClientIpAddress
Type: REG_DWORD
Default
Value: 0 (This setting is 0 because of Dynamic Host Configuration Protocol and
network address translation issues.)
Possible values: 0 (false) or any
non-zero value (true)
This value indicates whether a client IP address
will be added in AS_REQ to force the Caddr field to contain IP addresses in all
tickets.
•
Entry: TgtRenewalTime
Type: REG_DWORD
Default
Value: 600 seconds
This value is the time that Kerberos waits before
it tries to renew a Ticket Granting Ticket (TGT) before the ticket
expires.
•
Entry: AllowTgtSessionKey
Type: REG_DWORD
Default
Value: 0
Possible values: 0 (false) or any non-zero value (true)
This value indicates whether session keys are exported with initial
or with cross realm TGT authentication. The default value is false for security
reasons. Registry entries and values under the Kdc key
The registry entries that are listed in this section must be added
to the following registry subkey:
•
Entry: KdcUseClientAddresses
Type: REG_DWORD
Default Value: 0
Possible values: 0 (false) or any non-zero value
(true)
This value indicates whether IP addresses will be added in the
Ticket-Granting Service Reply (TGS_REP).
•
Entry: KdcDontCheckAddresses
Type: REG_DWORD
Default Value: 1
Possible values: 0 (false) or any non-zero value
(true)
This value indicates whether IP addresses for the TGS_REQ and
the TGT Caddr field will be checked.
•
Entry: NewConnectionTimeout
Type: REG_DWORD
Default Value: 50 (seconds)
This value is the time that an
initial TCP endpoint connection will be kept open to receive data before it
disconnects.
•
Entry: MaxDatagramReplySize
Type: REG_DWORD
Default Value: 1465 (decimal, bytes)
This value is the maximum
UDP packet size in TGS_REP and Authentication Service Replies (AS_REP)
messages. If the packet size exceeds this value, the KDC returns a
KRB_ERR_RESPONSE_TOO_BIG message that requests that the client switch to
TCP.
•
Entry: KdcExtraLogLevel
Type: REG_DWORD
Default
Value: 2
Possible values:
This value indicates what information the KDC will write to
event logs and to audits.
•
1 (decimal) or 0x1 (hexadecimal): Audit SPN unknown
errors.
•
2 (decimal) or 0x2 (hexadecimal): Log PKINIT errors.
(PKINIT is an Internet Engineering Task Force (IETF) Internet draft for "Public
Key Cryptography for Initial Authentication in Kerberos.")
•
4 (decimal) or 0x4 (hexadecimal): Log all KDC
errors.
•
Entry: KdcDebugLevel
Type: REG_DWORD
Default
Value: 1 for checked build, 0 for free build
This value indicates
whether debug logging is on (1) or off (0).
If the value is set to
0x10000000 (hexadecimal) or 268435456 (decimal), specific file or line
information will be returned in the edata field of KERB_ERRORS as
PKERB_EXT_ERROR errors during a KDC processing failure.
摘自Qhttp://support.microsoft.com/?scid=kb%3Ben-us%3B837361&x=11&y=18
]]>
Windowspȝ中的安全lg.
CAPICOM是一?/span>COM模型的组Ӟ可以?/span>Windows环境下各U语a中用。而且Q?/span>CAPICOM中的大多数接口都?#8220;脚本安全”的,q意味着你可以在览器网脚本中安全C用这些接口所提供的功能?/span>
3?span style="font-family: ?hu)?">使用口o(h)加密/解密数据Q?/span>
CAPICOM v2.0额外提供如下功能Q?/span>
1?span style="font-family: ?hu)?">产生和验证代码签名;
2?span style="font-family: ?hu)?">支持文g形式的证书;
3?span style="font-family: ?hu)?">快速证书搜索;
4?span style="font-family: ?hu)?">产生L数据的哈希|
5?span style="font-family: ?hu)?">支持AES法Q需?/span>Windows .NET Server 2003 ?/span> Windows XP支持Q;
6?span style="font-family: ?hu)?">支持高证书属性,例如Q政{、模ѝ?/span>
CAPICOM是重分发lgQ也是说它没有被包含在操作pȝ的中Q需要单独安装注册该lgQ可以从MS那里免费下蝲Q;CAPICOM v1.0 要求Win95?/span>WinNT 4.0或更高版本,CAPICOM v2.0 要求Win98 ?/span>WinNT 4.0 + SP4 或更高版?/span>
?/span>MSDN中有?/span>CAPICOM的详l描qͼ以下提供两个q接地址Q?/span>
CAPICOM使用参考:(x)msdn""Security"" Security(General)""SDK Documentation""Cryptography"" Cryptography Reference""CAPICOM Reference
CAPICOM例子E序Q?/span>msdn""Security"" Security(General)""SDK Documentation""Cryptography""
Using Cryptography""Using CAPICOM
下蝲最新的CAPICOMQ?/span>
http://download.microsoft.com/download/7/7/0/7708ec16-a770-4777-8b85-0fcd05f5ba60/CC2RINST.EXE
摘自:http://blog.csdn.net/brave1/archive/2005/06/07/389778.aspx下面是?Setspn.exe 命o(h)行实用程序的基本语法Q其?#8220;accountname”可以是单独的名称Q也可以是域\名称?/p>
setspn [parameter] accountname
Setspn.exe 可以使用下列参数Q?/p>
参数 | 功能 | CZ |
---|---|---|
-R | 重置 HOST ServicePrincipalName?/td> | setspn -R computername |
-A | dL?SPN?/td> | setspn -A SPN computername |
-D | 删除L?SPN?/td> | setspn -D SPN computername |
-L | 列出已注册的 SPN?/td> | setspn -L SPN computername |
下面的示例?Setspn.exe 命o(h)行实用程序注册以 Domain\UserAccount q行的应用程序池Q?/p>
SETSPN.EXE -A HOST/<your computer name> Domain\UserAccount
下面的示例注?SPN“HOST/daserver1”?#8220;HOST/{DNS of daserver1}”Q?/p>
setspn -R daserver1
下面的示例ؓ(f)计算?#8220;daserver1”注册 SPN“http/daserver”Q?/p>
setspn -A http/daserver daserver1
下面的示例从计算?#8220;daserver1”删除 SPN“http/daserver”Q?/p>
setspn -D http/daserver daserver1
下面我来介绍一下这kerberos协议如何实现认证?
前提:client和server都在kdc上已注册.
W一?Authentication Service Exchange
W二?Ticket Granting Service Exchange
W三?Client/Server Exchange
首先Client向kdc甌server服务,kdc查看server服务是受保护的服?所以要验证client的n?q就是第一?kdc验证client的n?Authentication Service Exchange).当kdc核实client的n份正后,?x)给client一个证?用这个证明我们可以得到访问server服务的许可证(Ticket),所以我们把q个证明叫做TGT(Ticket Granting Ticket).
当client得到TGT?用TGT来向kdc索要讉Kserver服务的通行?Ticket),q就是第二步Ticket Granting Service Exchange.
当client得到通行?Ticket)?׃server交互,向server出示通行?Ticket),即第三步Client/Server Exchange,从可得到server的服?
以上三步的具体实现要复杂得多,单介l如?
1Q?Authentication Service Exchange
通过q个Sub-protocolQKDCQ确切地说是KDC中的Authentication ServiceQ实现对Clientw䆾的确认,q发给该Client一个TGT。具体过E如
下:(x)
Client向KDC的Authentication Service发送Authentication Service RequestQKRB_AS_REQQ? Z(jin)保KRB_AS_REQ仅限于自己和KDC知道Q?/p>
Client使用自己的Master Key对KRB_AS_REQ的主体部分进行加密(KDC可以通过Domain 的Account Database获得该Client的Master KeyQ?/p>
KRB_AS_REQ的大体包含以下的内容Q?/p>
Pre-authentication dataQ包含用以证明自pn份的信息。说白了(jin)Q就是证明自q道自己声U的那个account的Password。一般地Q它的内Ҏ(gu)
一个被Client的Master key加密q的Timestamp?br /> Client name & realm: 单地说就是Domain name\Client Server NameQ注意这里的Server Nameq不是Client真正要访问的Server的名Uͼ而我们也?/p>
?jin)TGT是和Server无关的(Client只能使用TicketQ而不是TGT去访问ServerQ。这里的Server Name实际上是KDC的Ticket Granting Service的Server Name?br /> ASQAuthentication ServiceQ通过它接收到的KRB_AS_REQ验证发送方的是否是在Client name & realm中声U的那个人,也就是说要验证发送放?/p>
否知道Client的Password。所以AS只需从Account Database中提取Client对应的Master Key对Pre-authentication dataq行解密Q如果是一个合?/p>
的TimestampQ则可以证明发送放提供的是正确无误的密码。验证通过之后QAS一份Authentication Service ResponseQKRB_AS_REP
Q发送给C(j)lient。KRB_AS_REQ主要包含两个部分Q本Client的Master Key加密q的Session KeyQ?/p>
SKDC-ClientQLogon Session KeyQ和被自己(KDCQ加密的TGT。而TGT大体又包含以下的内容
Q?/p>
Session Key: SKDC-ClientQLogon Session Key
Client name & realm: 单地说就是Domain
name\Client
End time: TGT到期的时间?br />
Client通过自己的Master Key对第一部分解密获得Session KeyQSKDC-ClientQLogon Session KeyQ之后,携带着TGT便可以进入下一步:(x)TGSQ?/p>
Ticket Granting ServiceQExchange?/p>
2Q?TGSQTicket Granting ServiceQExchange
TGSQTicket Granting ServiceQExchange通过Client向KDC中的TGSQTicket Granting ServiceQ发送Ticket Granting Service Request
QKRB_TGS_REQQ开始。KRB_TGS_REQ大体包含以下的内容:(x)
TGTQClient通过AS Exchange获得的Ticket
Granting TicketQTGT被KDC的Master Keyq行?/p>
密?br /> AuthenticatorQ用以证明当初TGT的拥有者是否就是自己,所以它必须以TGT的办法方和自qSession KeyQSKDC-ClientQLogon Session Key
Q来q行加密?br /> Client name & realm: 单地说就是Domain name\Client?br /> Server name & realm: 单地说就是Domain name\ServerQ这回是Client试图讉K的那个Server?br /> TGS收到KRB_TGS_REQ在发lC(j)lient真正的Ticket之前Q先得整个Client提供的那个TGT是否是AS颁发l它的。于是它不得不通过Client提供?/p>
Authenticator来证明。但是Authentication是通过Logon Session KeyQSKDC-ClientQ进行加密的Q而自己ƈ没有保存q个Session Key。所?/p>
TGS先得通过自己的Master Key对Client提供的TGTq行解密Q从而获得这个Logon Session KeyQSKDC-ClientQ,再通过q个Logon Session
KeyQSKDC-ClientQ解密Authenticatorq行验证。验证通过向对方发送Ticket Granting Service ResponseQKRB_TGS_REPQ。这个KRB_TGS_REP?/p>
两部分组成:(x)使用Logon Session KeyQSKDC-ClientQ加密过用于Client和Server的Session KeyQSServer-ClientQ和使用Server的Master
Keyq行加密的Ticket。该Ticket大体包含以下一些内容:(x)
Session KeyQSServer-Client?br /> Client name & realm: 单地说就是Domain name\Client?br /> End time: Ticket的到期时间?br /> Client收到KRB_TGS_REPQ用Logon Session KeyQSKDC-ClientQ解密第一部分后获得Session KeyQSServer-ClientQ。有?jin)Session Key?/p>
TicketQClient可以之间和Serverq行交互Q而无d通过KDC作中间h?jin)。所以我们说Kerberos是一U高效的认证方式Q它可以直接?/p>
qClient和Server双方来完成,不像Windows NT 4下的NTLM认证方式Q每ơ认证都要通过一个双方信ȝW?Ҏ(gu)完成?/p>
我们现在来看?Client如果使用Ticket和Server怎样q行交互的,q个阶段通过我们的第3个Sub-protocol来完成:(x)CSQClient/Server Q?/p>
Exchange?/p>
3Q?CSQClient/Server QExchange
Client通过TGSExchange获得Client和Server的Session KeyQSServer-ClientQ,随后创徏用于证明自己是Ticket的真正所有者的AuthenticatorQƈ使用Session KeyQSServer-ClientQ进行加密。最后将q个被加密过的Authenticator和Ticket作ؓ(f)Application Service RequestQKRB_AP_REQQ发
送给Server。除?jin)上qC内容之外,KRB_AP_REQq包含一个Flag用于表示Client是否需要进行双向验证(Mutual AuthenticationQ?/p>
Server接收到KRB_AP_REQ之后Q通过自己的Master Key解密TicketQ从而获得Session KeyQSServer-ClientQ。通过Session KeyQSServer
-ClientQ解密AuthenticatorQ进而验证对方的w䆾。验证成功,让Client讉K需要访问的资源Q否则直接拒l对方的h?/p>
对于需要进行双向验证,Server从Authenticator提取TimestampQ用Session KeyQSServer-ClientQ进行加密,q将其发送给C(j)lient用于
Client验证Server的n份?/p>
惌更深入的理解kerberos,请参考官方网?/p>
http://web.mit.edu/Kerberos/