月度归档:2013年11月

用Quick Sticky插件管理WordPress一键置顶文章

在 WordPress入门 之 发布新文章和管理文章 中,倡萌已经简单提到可以在文章编辑界面或者快速编辑界面设置置顶文章,但是如果你想在后台文章列表中添加一键置顶文章的功能,不妨试试 Quick Sticky 或 SM Sticky Clicky Star 插件。

Quick Sticky is a very simple plugin for WordPress that makes it easier to quickly feature or “sticky” posts from the posts overview screen. It is a huge time saver when dealing with sticky posts.

On occasions I have also created sites where I have only wanted one sticky post at a time. The plugin contains a filter which allows you to enable this behaviour. Simply add the following snippet of code to your theme functions.php file:

add_filter('qs_one_post_only', '__return_true');

Once enabled, toggling a post as sticky will un-sticky (or un-feature) all of the other posts.

Quick Sticky 和 SM Sticky Clicky Star 都是用来给后台文章列表添加一键置顶文章功能的,一个较大的不同是,SM Sticky Clicky Star 支持 Ajax 无刷新设置,而 Quick Sticky 不支持。以下是 SM Sticky Clicky Star 的效果图:

image

 

在后台插件安装界面搜索 Quick Sticky 或 SM Sticky Clicky Star 即可在线安装,或者下载 Quick Sticky 或 SM Sticky Clicky Star

Hooks & Filters

The plugin has one filter that allows you to enforce one sticky post at a time. Add the following to your functions.php file:

add_filter('qs_one_post_only', '__return_true');

从0开始学编程(8) – 数据库简介

 

前面主要学习了php相关知识,另外了解一些html的知识,若再学习些关于数据库的知识,就可以将php应用到真实可用的地方。

通常php用来开发网页等逻辑, 数据库用来存储数据,php同数据库相互配合可以构建动态网站。

一. 数据及数据库简介

首先什么是数据库,什么是数据, 对于初学者是需要了解的东西。

看下面的表格

wps_clip_image-22858

表格中的内容就是数据。 如何存储这些数据到计算机中?可以在计算机中开辟一个空间,并且编写一个程序来维护管理这些数据,这样一个系统经过完善后可以形成一个真正的数据库。

wps_clip_image-1492

上图是另外一个数据的例子。

这些数据也是要存储到数据库中的。

wps_clip_image-20892

又一个数据的例子, 通常像上面的这些数据是存储到数据库中一个数据表里的。

类似的例子很多,如下:

wps_clip_image-32707

wps_clip_image-28608

wps_clip_image-25502

希望通过上面的多个例子, 大家能了解 什么是数据, 什么是数据库。

了解数据, 其实就了解数据库。数据库就是承载数据的仓库。

下图是一个企业常用数据库的情况

wps_clip_image-25330

下面是一个数据库系统的形象化表述。

wps_clip_image-8419

数据库中可以存储的种类可以是各种各样,如下。

wps_clip_image-3383

二.实际数据库系统举例

例子1:中华在线数据库

数据中华在线数据库(http://data.allchinadata.com)覆盖企业、行业、产品、宏观、海关五大模块海量数据,且分类分库建设;基于BS架构,实现高速、便捷的在线数据浏览;同时,集成数据挖掘工具,提供专业的数据统计分析功能;嵌入专家系统,提供细分行业及地区数据报告。
wps_clip_image-2038

实时企业数据库

• 覆盖细分行业近20万家企业;
• 企业基本信息:企业名称、所属行业、企业所在地、经营范围、从业人员等;
• 主要财务指标:资产规模、销售收入、负债、利润等;
• 杜邦分析指标:资产负债率、流动比率、资产利润率等;
• 历史时间序列可追溯至1999年。

wps_clip_image-502

实时行业数据库

• 覆盖755个细分行业;
• 包括70余项年度、季度、月度主要经济指标;
• 细分至31个省(自治区、直辖市)、368个地级城市(及县区);
• 历史时间序列可追溯至1999年。

wps_clip_image-6383

实时产品数据库

• 覆盖400多种工业产品产量、销量、库存的最新月度、季度数据;
• 细分至31个省(自治区、直辖市);
• 历史时间序列可追溯至2003年。

wps_clip_image-14856

实时宏观数据库

• 覆盖国民经济核算、财政金融、贸易、投资房产、运输邮电、物价工资等24个专题7000多项年度、季度、月度经济指标最新数据;
• 细分至31个省(直辖市、自治区);
• 历史时间序列可追溯至1949年。

wps_clip_image-1498

实时海关数据库

• 覆盖海关HS编码的三大门类,21大类,98章节,近万种商品分国别的进、出口量额月度最新数据(以中国为原产国或目的国)。
• 历史时间序列可追溯至2003年。

例子2:一个集中数据库建设方案

建设的总体思路是:首先重新规划数据资源,优先满足管理透明方面的要求,逐步形成专业的应用,为经营分析系统提供唯一的数据源,为今后系统的集中打好 基础,其次通过搭建全业务服务接口架构,建设两级互动的一体化生产运营机制,形成全业务、全渠道、全客户的销售能力,形成一体化产品的发布和动态管理能 力,形成统一集中的业务资源管理及动态调配能力。
建设方案基于统一的数据模型和编码,将分散在总部、省分各生产系统中异构的客户、产品、资源、代理商、SP/CP、清单/账单等业务和交易数据准实时 地同步、转换/映射、整合进集团集中数据库,形成全集团核心业务数据的统一视图,逐步搭建佣金计算、积分管理、业务/客户收入分摊、SP/CP结算等集团 集中应用,实现业务/收入的透明管控,提升全网服务的能力。实现生产数据库、全网集中数据库、用于数据决策分析的DSS数据库三级架构模式。省分数据库存 放各自省分的客户、产品、业务资源、订购、合作伙伴、渠道、组织权限、账单、详单、欠费等数据;集中数据库是基于准实时数据同步机制的全客户、全业务、全 渠道的操作数据存储,提供统一整合的数据视图,实现全网数据分析与稽核。

wps_clip_image-12673

集中数据库的数据规划分为OLAP共享库、私有数据库、ODS库和历史数据库。
OLTP共享库分为SID和ABM:SID存放客户、产品、业务资源、订购、合作伙伴、渠道、组织权限等各系统所使用的共有数据;ABM存放共享余额和计划量数据;
私有数据库存放各系统为保障运营支撑的非共享数据;
ODS库是基于准实时数据同步机制的全客户、全业务、全渠道的操作数据存储,针对多应用的数据分布环境,提供统一整合的数据视图,并可有效分担生产系统负荷;
历史数据库存放各类历史数据,包括账单、详单、客户接触历史及历史日志。

三. 常见数据库系统举例

1. 一个有远程备份数据中心的数据库系统

wps_clip_image-27627

如上图,系统存在一个生产中心,一个灾备中心,正常情况下系统使用生产中心,当生产中心发生故障时,系统可以采用灾备中心,确保企业数据的安全。

2. 一个有集中存储的数据库系统

wps_clip_image-1150

如上图, 系统中有很多数据库, 这些数据库同通过一定的网络等设备来共享外部存储。

3. 常见数据库系统的配置

wps_clip_image-9086

如上图一个实际的数据库系统,可能包括:数据库服务器, 数据库审计, 安全中心,网络应用服务器等。

4. 一个实际的双数据中心应用系统

wps_clip_image-3012

如上图, 系统通过应用网关将用户风流到数据中心A或者数据中心B, 两个数据中心数据通过一定的技术进行复制,这样当一个数据中心出现故障时,另外一个数据中心可以立即为用户提供服务。

5. 数据库系统的实际应用场景

wps_clip_image-17618

6. 数据库系统通常需要的相关工作

wps_clip_image-16115

7. 一个实际的数据中心的图示

wps_clip_image-12259

四.Mysql数据库

前面看了数据、数据库、数据库系统、数据中心等多个例子,这些例子仅仅是需要了解一下,来理解数据库。

Mysql是一个常用的开源数据库系统。下图是在安装xmapp时已经安装了mysql数据库以及一个数据库管理工具的系统。

wps_clip_image-4493

下面是 msyql数据库的相关学习资料

http://pan.baidu.com/s/13m3lN

2b1x

 

相关文章

从0开始学编程(22)-android开发环境搭建与入门教程

从0开始学编程(21)-Java网络编程入门

从0开始学编程(20)-Java线程入门

从0开始学编程(19)–java流概念入门

从0开始学编程(18)–java快速入门

从0开始学编程(17)–面向对象思想了解

从0开始学编程(16)–数据库加强

从0开始学编程(15)–总结篇-php编程强化巩固

从0开始学编程(14) – Php数据相关操作

从0开始学编程(13) Php获取form表单数据

从0开始学编程(12) 使用 eclipse的 php插件单步调试php程序

从0开始学编程(11) 使用 eclipse的 php插件 调试php程序

从0开始学编程(10) 用例子学习bootstrap的布局

从0开始学编程(9) – css、html和js简便工具

从0开始学编程(8) – 数据库简介

从0开始学编程(7) – 常用网站介绍

从0开始学编程(6)–在多了解一下php都涉及些啥东西

从0开始学编程(5)–方便的php编辑工具notepad++

从0开始学编程(4)–html基础入门

从0开始学编程(3)–学习必备的基础技能

从0开始学编程(2)–学习的方法和目标

从0开始学编程(1)–xampp配置php学习环境

从0开始学编程(7) – 常用网站介绍

编程是一项技术, 若是不能同具体项目结合, 他本身就没办法创造价值,在我们做项目中可能涉及很多的事情, 在我们生活中也有很多事情, 这些事情有很多网络有关系,因此若是能熟练应用网络, 可以大大方便我们工作, 方便我们学习编程, 方便我们工作, 方便我们学习。

下面介绍一下实用的,介绍一下网站的教程给大家, 下面的几个视频是整套视频中, 对编程学习有比较大作用的, 先分享出来, 建议要仔细阅读相关视频。

wps_clip_image-9407_thumb[1]

下载地址:http://pan.baidu.com/s/1DYI0s

密码:1xpl

整个这套教程都比较好, 因此建议大家下载了慢慢看,相关目录如下:

目录如下:

wps_clip_image-31142_thumb[1]

这个教程是主要讲解一些常用的互联网网站的情况, 使用方法, 后面还有一些搜索引擎的使用等。 上传的视频是在原视频基础上, 进行了转码, 转成比较容易播放的格式,同时放大了声音。

下载地址:http://pan.baidu.com/s/17TetW

密码:x3mw

下面是原文介绍

wps_clip_image-2529_thumb[1]

重点推荐一下:
怎么找工作,说的是查询对方公司资质,查询网友点评公司,各种人事代理机制等。
怎么租房,说的是查询对方房产证真伪,对方身份证,中介资质,避免上当等注意事项。
怎么用日曆,说的是查阅日曆,比如某公司校园招聘日曆,自己定义日曆,把日曆发佈为共有等。
威客网主要介绍怎么在网上做兼职赚钱
各种搜索能力应该说是互联网时代的搜商,具体说明如下:google最常见,简单介绍一下google中的关键字的使用;还有怎么通过图片文件、自己的声音、midi文件作为搜索源搜索,还有就是一些查单词、查电影的经典渠道。
买笔记本的视频是我真实的经历,貌似有点想神舟电脑的託儿,大家自己多思考比较。
豆瓣网教程做的很不成熟,我其实没有非常深入了解豆瓣,只是蜻蜓点水,请豆瓣资深用户多提宝贵意见。

 

相关文章

从0开始学编程(22)-android开发环境搭建与入门教程

从0开始学编程(21)-Java网络编程入门

从0开始学编程(20)-Java线程入门

从0开始学编程(19)–java流概念入门

从0开始学编程(18)–java快速入门

从0开始学编程(17)–面向对象思想了解

从0开始学编程(16)–数据库加强

从0开始学编程(15)–总结篇-php编程强化巩固

从0开始学编程(14) – Php数据相关操作

从0开始学编程(13) Php获取form表单数据

从0开始学编程(12) 使用 eclipse的 php插件单步调试php程序

从0开始学编程(11) 使用 eclipse的 php插件 调试php程序

从0开始学编程(10) 用例子学习bootstrap的布局

从0开始学编程(9) – css、html和js简便工具

从0开始学编程(8) – 数据库简介

从0开始学编程(7) – 常用网站介绍

从0开始学编程(6)–在多了解一下php都涉及些啥东西

从0开始学编程(5)–方便的php编辑工具notepad++

从0开始学编程(4)–html基础入门

从0开始学编程(3)–学习必备的基础技能

从0开始学编程(2)–学习的方法和目标

从0开始学编程(1)–xampp配置php学习环境

跨 KDC 域的 WebSphere Web Services Security 应用中的 Kerberos 加密算法

最新的 Kerberos 版本 5 没有定义它所支持的加密算法。这使得该协议灵活并易于扩展,但也使其不同实现之间的互操作问题非常突出。为了使基于不同 Kerberos 实现的客户端、应用程序和认证服务器之间实现互操作,它们必须至少有一个共同支持的加密算法。本文描述了在一个常见场景中如何确定并配置多方共同支持的 Kerberos 加密算法。该场景中,基于 Web Service security 的 WebSphere 应用程序运行在 z/OS 和 Windows 两个互信的 KDC 域中。最后给出一些关于 Kerberos 加密算法的调试方法。

介绍

在 WebSphere Application Server 版本 7 的安全方面,加入了对 Kerberos 身份认证机制的支持。Kerberos 是一个成熟、灵活、开放并且非常安全的网络认证协议。它使用私钥加密技术为客户 / 服务器端应用提供了强大的认证功能。

在认证过程中,Kerberos 需要对传递于不同参与者之间的令牌(ticket 和 authenticator)进行加密和解密。Kerberos 版本 5 没有对它所支持的加密算法的个数或种类进行预定义。虽然这使得该协议灵活并且易于扩展,但也使 Kerberos 5 的不同实现之间的互操作问题非常突出。为了使基于不同 Kerberos 实现的客户端、应用程序和认证服务器之间实现互操作,它们必须至少有一个共同支持的加密算法。

本文描述了在一个非常常见的客户场景中,如何 确定并配置多方共同支持的 Kerberos 加密算法。在这个场景中,使用了 Web Service security 的 WebSphere 应用程序运行在 z/OS 和 Windows 两个互相信任的 KDC 域中。在文章的最后,给出了一些关于 Kerberos 加密算法的调试方法。

场景概述

图 1. 场景概述

图 1. 场景概述在 这个场景中,配置了两个 KDC。一个是基于 Windows 平台的 Windows KDC,另一个是基于 z/OS 平台的 z/OS KDC。实现了 Web Service security 的应用程序由客户端和服务器端两个部分组成,客户端部署在 Windows 平台的 WebSphere Application Server 上,服务器端部署在 z/OS 平台的 WebSphere Application Server 上。Windows 平台处于 Windows KDC 域中,z/OS 平台处于 z/OS KDC 域中。尽管在本场景中单向的信任(z/OS KDC 信任 Windows KDC)就足够了,但是本文还是介绍了如何配置双向的信任关系。因此,该场景会达到这样的效果:Windows KDC 域中的用户(客户端用户)如果通过了 Windows KDC 的认证,并且在服务器端通过了授权验证,就可以通过 Web Service 客户端程序访问服务器端的 Web Service。

如果您想了解如何配置跨 z/OS KDC 和 Windows KDC 领域信任,请参考这篇文章“Implementing SPNEGO TAI single sign-on for WebSphere applications with z/OS and Windows Kerberos trusted realms”。

表 1 中列出了本文中所用到的一些系统参数值,需要替换为您实际场景中的真实值。

表 1. 本文用到的系统参数值
参数名参数值
Windows KDC 主机名Winserver2008-1.pdl.pok.ibm.com
Windows Web Service 客户端主机名boss61a.pdl.pok.ibm.com
Windows KDC 域WIN2008KDC.PDL.POK.IBM.COM
z/OS KDC 主机名webwb5.pdl.pok.ibm.com
z/OS WebSphere 主机名ztestb0.pdl.pok.ibm.com
z/OS KDC 域ZOSKDC.PDL.POK.IBM.COM

不同平台 /Feature 支持的加密算法

由于 Kerberos 版本 5 没有预定义它所支持的加密算法的类型或个数,每个特定的 Kerberos 实现支持的加密算法不尽相同。选择使用哪种加密算法时,需要认真考虑各算法的加密能力,以及需要互操作的各平台及产品所支持的加密算法类型。

本 文中场景所涉及到的平台包括 z/OS KDC 和 Window KDC,我们需要考虑这两种 KDC 所支持的加密算法。由于场景中涉及的应用程序是运行于 WebSphere Application Server 的 Web Service security 应用,我们还需要考虑 WebSphere Application Server 以及 Web Service security 所支持的加密算法。

下面将介绍不同平台 /feature 所支持的 Kerberos 加密算法。

z/OS KDC

z/OS 上的 Kerberos 实现叫做“Network Authentication Service”,它所支持的 Kerberos 加密算法从 z/OS 1.9 开始相对于 z/OS 1.8 有所改变。

z/OS 1.8 上的 Network Authentication Service 支持以下几种加密算法:

  • DES - 56-bit DES
  • DESD - 带 key derivation 的 56-bit DES
  • DES3 - 168-bit DES

z/OS 1.9 上的 Network Authentication Service 除了支持上面提到的 DES,DESD 和 DES3 以外,还支持以下两种加密算法:

  • AES128 - 128-bit AES
  • AES256 - 256-bit AES

Windows KDC

Windows Server 2003 支持 RC4-HMAC,DES-CBC-CRC 和 DES-CBC-MD5. Windows Server 2008 除了这三个加密算法外,还支持 -CTS-HMAC-SHA1-96 和 AES128-CTS-HMAC-SHA1-96。RC4-HMAC 是 Microsoft Windows 缺省使用的加密算法。

目前的 IBM JDK

WebSphere Application Server 使用内嵌的 IBM JDK,所以 IBM JDK 所支持的 Kerberos 加密算法也是需要考虑的方面。IBM JDK 中的 Java™ Cryptography Extension(JCE) 缺省的配置限制它的加密能力。如果需要使用 192-bit 和 256-bit Advanced Encryption Standard (AES),必须要使用无限制的 policy 文件。

为了简化我们的场景,本文的配置将不选择 192-bit 或者 256-bit AES。

WebSphere WS-security XML

由于 XML 规范不支持 DES,所以 WebSphere 中的 Web Service 功能也不支持 DES。

可 扩展标记语言(XML)加密规范由万维网联盟(W3C)在 2002 年制定。该规范包括对数据进行加密、解密的步骤,呈现 XML 加密数据的语法,用来进行数据解密的信息,以及加密算法列表。加密算法列表中包括 triple Data Encryption Standard(DES), Advanced Encryption Standard(AES) 以及 Rivest-Shamir-Adleman algorithm (RSA)几类。XML 规范支持的加密算法包括 tripledes-cbc, aes128-cbc, aes192-cbc, aes256-cbc, rsa-1_5 和 rsa-oaep-mgf1p

加密算法之间的兼容性

z/OS RACF 和 Windows 所支持的 Kerberos 各加密算法之间存在一定的对应关系,各个对应的加密算法之间是兼容的。表 2 列出了这种兼容关系。

表 2. Kerberos 加密算法之间的兼容关系
z/OS RACFWindows
DESdes-cbc-crc, des-cbc-md5
DESDdes-hmac-sha1
DES3des3-cbc-sha1-kd , tripledes-cbc
AES128aes128-cts-hmac-sha1-96, aes128-cbc
AES256aes256-cts-hmac-sha1-96, aes256-cbc

确定共有的加密算法

综上所述,表 3 总结了各不同平台 /feature 对各种 Kerberos 加密算法的支持情况。“Y”表示支持,“N”表示不支持。

表 3. 不同平台 /feature 对 Kerberos 加密算法的支持
z/OS 1.8z/OS 1.9Window 2003Windows 2008Current IBM JDKWS-securityXML
DESYYYYYN
DES3YYNNYY
DESDYYNNYN
AES128NYNYYY
AES256NYNYNY

由 于本文场景的需要,我们需要综合考虑 z/OS KDC、Windows KDC、IBM JDK 和 WebSphere Application Server 中的 WS-security XML 所支持的加密算法,确定哪个加密算法是它们共同支持的。所以本文会选择 z/OS 1.9 和 Window 2008 server 作为操作系统平台,使用 AES128 作为共用的 Kerberos 加密算法。

配置 Kerberos 加密算法

在 Kerberos 配置文件中配置加密算法

加 密算法需要在几个 Kerberos 配置文件中进行设置,包括 z/OS KDC 要用到的 envar,运行于 z/OS 平台的 WebSphere Application Server 需要使用的 krb5.conf 和 Windows 客户端需要使用的 krb5.ini。

表 4. 需要设置加密算法的 Kerberos 配置文件
平台Kerberos 配置文件
z/OS KDCenvar
z/OS 上的 WebSphere Application Serverkrb5.conf
Windows 客户端krb5.ini
  1. z/OS KDC的 Kerberos 配置文件

envar 文件是 z/OS KDC 用来设置环境变量的配置文件。在该文件中,我们可以通过设置 SKDC_TKT_ENCTYPES 参数来指定该 KDC 支持哪些 Kerberos 加密算法。由于在本文场景中需要使用 AES128 作为 Kerberos 加密算法,参数 SKDC_TKT_ENCTYPES 的值需要包含 aes128-cts-hmac-sha1-96。下面是一个 envar 文件的例子,在这个例子中,SKDC_TKT_ENCTYPES 的值被设为所有的加密算法,所以 z/OS KDC 会支持所有的 Kerberos 加密算法。

清单 1. envar

b)z/OS WebSphere Application Server 和 Window 客户端的 Kerberos 配置文件

在 每一个 Kerberos 客户端机器上都需要配置 Kerberos 配置文件 krb5.conf 或者 krb5.ini。在 z/OS 平台上需要为 WebSphere Application Server 配置 krb5.conf;而在 Windows 平台上,需要为 Web Service 客户端配置 krb5.ini。在 krb5.conf/krb5.ini 文件中,支持的 Kerberos 加密算法是由参数 default_tkt_enctypes 和 default_tgs_enctypes 的值决定的。default_tkt_enctypes 指定了 TGT 中用户部分所使用的加密算法;default_tgs_enctypes 指定了 service ticket 中用户部分所使用的加密算法。为了简化配置,本文将这两个参数都设为一样的 aes128-cts-hmac-sha1-96 加密算法。[capaths] 部分用来指明 z/OS KDC 域和 Window KDC 域彼此信任。

清单 2. krb5.conf
 [libdefaults] 

 default_realm = ZOSKDC.PDL.POK.IBM.COM 
 default_keytab_name = FILE:/etc/krb5/krb5.keytab 
 kdc_default_options = 0x40000000 
 use_dns_lookup = 0 
 udp_preference_limit=1 

 ; Default encryption types if AES128 is not supported 
 default_tkt_enctypes = aes128-cts-hmac-sha1-96 
 default_tgs_enctypes = aes128-cts-hmac-sha1-96 

[realms] 

 ZOSKDC.PDL.POK.IBM.COM = { 
    kdc = webwb5.pdl.pok.ibm.com:88 
    kpasswd_server = webwb5.pdl.pok.ibm.com:464 
    admin_server = webwb5.pdl.pok.ibm.com:749 
 } 

 WIN2008KDC.PDL.POK.IBM.COM = { 
    kdc = Winserver2008-1.pdl.pok.ibm.com:88 
    default_domain = WIN2008KDC.pdl.pok.ibm.com 
 } 

 [domain_realm] 

 ztestb0.pdl.pok.ibm.com = ZOSKDC.PDL.POK.IBM.COM 
 webwb5.pdl.pok.ibm.com = ZOSKDC.PDL.POK.IBM.COM 
 boss61a.pdl.pok.ibm.com = WIN2008KDC.PDL.POK.IBM.COM 
 Winserver2008-1.pdl.pok.ibm.com = WIN2008KDC.PDL.POK.IBM.COM 

 [capaths] 

 ZOSKDC.PDL.POK.IBM.COM = { 
    WIN2008KDC.PDL.POK.IBM.COM = . 
 } 

 WIN2008KDC.PDL.POK.IBM.COM = { 
    ZOSKDC.PDL.POK.IBM.COM = . 
 }
清单 3. krb5.ini
 [libdefaults] 

 default_realm = WIN2008KDC.PDL.POK.IBM.COM 
 use_dns_lookup = 0 
 forwardable  = true 
 renewable  = true 
 udp_preference_limit=1 

 ; Default encryption types if AES128 is not supported 
 default_tkt_enctypes = aes128-cts-hmac-sha1-96 
 default_tgs_enctypes = aes128-cts-hmac-sha1-96 

[realms] 

 ZOSKDC.PDL.POK.IBM.COM = { 
    kdc = webwb5.pdl.pok.ibm.com:88 
    kpasswd_server = webwb5.pdl.pok.ibm.com:464 
    admin_server = webwb5.pdl.pok.ibm.com:749 
 } 

 WIN2008KDC.PDL.POK.IBM.COM = { 
    kdc = Winserver2008-1.pdl.pok.ibm.com:88 
    default_domain = WIN2008KDC.pdl.pok.ibm.com 
 } 

 [domain_realm] 

 ztestb0.pdl.pok.ibm.com = ZOSKDC.PDL.POK.IBM.COM 
 webwb5.pdl.pok.ibm.com = ZOSKDC.PDL.POK.IBM.COM 
 boss61a.pdl.pok.ibm.com = WIN2008KDC.PDL.POK.IBM.COM 
 Winserver2008-1.pdl.pok.ibm.com = WIN2008KDC.PDL.POK.IBM.COM 

 [capaths] 

 ZOSKDC.PDL.POK.IBM.COM = { 
    WIN2008KDC.PDL.POK.IBM.COM = . 
 } 

 WIN2008KDC.PDL.POK.IBM.COM = { 
    ZOSKDC.PDL.POK.IBM.COM = . 
 }

Kerberos 加密算法的平台相关配置

  1. z/OS KDC

RACF 中需要为客户端和 WebSphere Application Server SPN 创建带 KERB 字段的用户。我们需要在用户创建阶段保证它们支持 AES128 加密算法。

可以参考下面的 RACF 命令来创建客户端用户:

ADDUSER CLIENT PASSWORD(temp)

ALTUSER CLIENT KERB(KERBNAME(CLIENT) ENCRYPT(NODES NODES3 NODESD AES128 NOAES256)) PASSWORD(password) NOEXPIRED

下面是创建 WebSphere Application Server SPN 用户的命令示例:

ADDUSER WASKERB PASSWORD(temp)

ALTUSER WASKERB KERB(KERBNAME(WAS/ztestb0.pdl.pok.ibm.com) ENCRYPT(NODES NODES3 NODESD AES128 NOAES256)) PASSWORD(password) NOEXPIRED

在 z/OS 系统升级或移植时,可能会遇到一些问题。DES3 只有在 z/OS 1.2 及以上版本才被支持;AES128 和 AES256 只有在 z/OS 1.9 或以上才被支持。当一个 principal 的密码改变后,会为该 principal 生成当前级别 z/OS 所支持的所有加密算法的 key。所以当 principle 从低于 z/OS 1.2 的系统移植到 z/OS 1.2 上时,该 principal 没有 DES3 key,必须通过修改 principal 的密码来生成 DES3 key。同样的情况也适用于 z/OS 1.9 和 AES128/AES256 key。

Kerberos principal krbtgt 在 RACF 中被定义为 REALM KERBDFLT。如果系统升级到了 z/OS 1.9 后没有对其密码进行更改,那么它只有 DES,DESD 和 DES3 key,没有 AES128 和 AES256 key。可以通过这个命令更改密码来生产 AES key:

RALT REALM KERBDFLT KERB(PASSWORD(xxx))

对于其它的 principal,使用 ALTUSER 或其它命令来更改密码。

如果 principal 从别的系统移植过来,原理的系统中 RACF 选项 KERBLVL 被设成了 0,那么这些 principal 只有 DES key。

  1. Windows KDC

为了使用 AES128 加密算法,Windows KDC 上需要进行一些特殊的配置。

  • 确保用户帐号不使用 DES 作为加密算法

对于 AD 用户帐号,需要确保没有使用 DES 加密算法。以 user1 为例:

打开 “Server Manager”。在左边的导航树上打开

Roles -> Active Directory Domain Services -> Active Directory Users and Computers -> Domain Name (这里是 WIN2008KDC.pdl.pok.ibm.com) -> users -> 选中 “user1”,右键

打开 Properties Dialog 并切换到“Account” 标签页。确保"Use Kerberos DES encryption types for this account" 选项没有选中。如果这个选项是被选中的,DES 将被用作该帐号的加密算法,而不是 AES128。

图 2. 不选 "Use Kerberos DES encryption types for this account"

图 2. 不选

  • 保证只使用 AES128 加密算法

打开注册表编辑器:开始 -> 运行 -> 输入“regedit”

右键选中条目 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\kdc -> New -> DWORD

输入新的子关键字的名称“KdcUseRequestedEtypesForTickets”。

右 键选中“KdcUseRequestedEtypesForTickets”并选择“Modify”,将其值设为“1”。这样 KDC 就会只使用设置的 AES128 加密算法。如果该注册表条目的值没有被设置,那么它的缺省值为 0,意味着 KDC 会使用它所支持的功能最强的加密算法。

图 3. 设置 KdcUseRequestedEtypesForTickets 的值为 1

图 3. 设置 KdcUseRequestedEtypesForTickets 的值为 1

  • 告诉 MS KDC foreign realm(z/OS KDC)支持 AES

通过 Control Panel -> Administrator Tools -> Active Directory Domains and Trusts 路径打开“Active Directory Domains and Trusts”窗口

右键点击 WIN2008KDC.pdl.pok.ibm.com,选中 properties

转到 Trusts 标签页并选择 ZOSKDC.PDL.POK.IBM.COM ->

点击 Properties … ,选中“The other domain supports Kerberos AES Encryption”

图 4. Foreign realm 支持 AES 加密算法

图 4. Foreign realm 支持 AES 加密算法

关于加密算法的一些调试方法

方法 1

当你需要查看存储在 keytab 文件中的 principle 使用的加密算法时,可以使用 klist 命令。

 klist -k -e FILE:/etc/krb5/krb5.keytab

运行结果:

 Key table: FILE:/etc/krb5/krb5.keytab 
 Number of entries: 1 

 [1] principal: WAS/ztestb0.pdl.pok.ibm.com@ZOSKDC.PDL.POK.IBM.COM 
        KVNO: 1 
        Encryption type: AES128-CTS-HMAC-SHA1-96

方法 2

如果需要查看运行时所使用的加密算法是否正确,可以打开一些包含加密算法信息的调试信息。

  1. z/OS KDC

打开 SKRBKDC job 的调试信息:

  • 运行时动态的打开调试信息

SKRBKDC job 启动后,使用控制台命令

 F SKRBKDC,DEBUG ON 
 F SKRBKDC,DEBUG *.8
  • 在配置文件中打开调试信息

在 envar 文件中设置如下参数,然后重启 SKRBKDC job

 _EUV_SVC_DBG=*.8 
 _EUV_SVC_DBG_MSG_LOGGING=1 
 _EUV_SVC_DBG_FILENAME=/tmp/kdc.dbg 
 _EUV_SVC_MSG_LOGGING=STDOUT_LOGGING
  1. WebSphere Application Server

设置与 Kerberos 调试相关的 JVM custom properties

 com.ibm.security.jgss.debug=all 
 com.ibm.security.krb5.Krb5Debug=all
图 5. 在管理控制台中设置与 Kerberos 调试相关的 JVM custom properties

图 5. 在管理控制台中设置与 Kerberos 调试相关的 JVM custom properties

  1. 查看网络数据包中使用的加密算法

Wireshark 可以捕获网络中的数据包,查看发往 KDC 和从 KDC 发出的数据包中使用的加密算法。

图 6. 使用 Wireshark 查看数据包中的加密算法

图 6. 使用 Wireshark 查看数据包中的加密算法

方法 3

在调试信息中,有时候会使用特定的数字来代表相应的加密算法。RFC 3961 中定义了各加密算法和数字之间的对应关系。

表 5. RFC 3961 中列出的加密算法与数字的对应关系
加密算法数字
des-cbc-crc1
des-cbc-md42
des-cbc-md53
des3-cbc-md55
des3-cbc-sha17
dsaWithSHA1-CmsOID9
md5WithRSAEncryption-CmsOID10
sha1WithRSAEncryption-CmsOID11
rc2CBC-EnvOID12
rsaEncryption-EnvOID13
rsaES-OAEP-ENV-OID14
des-ede3-cbc-Env-OID15
des3-cbc-sha1-kd16
aes128-cts-hmac-sha1-9617
aes256-cts-hmac-sha1-9618
rc4-hmac23
rc4-hmac-exp24
subkey-keymaterial65

结束语

本 文描述了在一个客户常见场景(基于 Web Service security 的 WebSphere 应用程序运行在 z/OS 和 Windows 两个互信的 KDC 域中)中如何确定并配置多方共同支持的 Kerberos 加密算法。这是基于不同 Kerberos 实现的客户端、应用程序和认证服务器之间实现互操作的必要条件。最后,本文还给出一些关于 Kerberos 加密算法的调试方法,以方便客户解决实际操作中可能碰到的 Kerberos 加密算法相关的问题。

测试驱动的单点登录

如何通过单点登录访问多个系统和服务!

本文介绍了如何在 IBM i 平台上设置单点登录 (SSO)。SSO 允许您登录到主工作站,之后无需再次登录即可访问其他系统和应用程序。您将了解如何设置所有必要的软件,以及如何在执行后续步骤之前,先验证每一个步骤是 否已正确完成。之后,您不必再逐次登录,即可使用 5250 Emulation、NetServer、IBM System i Navigator、IBM WebSphere® Application Server 和 Java™ Toolbox 访问 IBM i 系统。请注意,有多个不同的组件必须协同工作,因此实现 SSO 所需的时间取决于您对各个组件的熟悉程度,但通常都得花几天来完成。

先决条件

查阅《基于 Windows 的单点登录》红皮书

尽管以下 IBM Redbooks® 红皮书资料发布于 2004 年,但我们还是建议读者先通读这些资料,再尝试配置 SSO。我们认为这些文档非常重要、非常有用,并且我们确信读者也会发现这一点。

Windows-based Single Signon and the EIM Framework on the IBM Eserver iSeries Server

请 特别注意第 2 章 “规划 Network Authentication Service 和 Enterprise Identity Mapping 的实现”。这一章是成功实现 SSO 的关键所在。第 2 章中给出几个重点是必要的先决条件的组成部分,另外还应注意第 2.4 节规划工作表。不要低估规划工作表 (Planning Worksheet) 的价值。附录 D 给出了一个空白的规划工作表,以供读者使用。

下面给出了规划单点登录时应参考的两个链接,其中包含上述红皮书资料中缺少的最新信息。
下面给出了我们使用的规划工作表,有助于理解本文中给出的示例和图释。

规划工作表
项目
规划工作表
结果
AiSeries 所属的 Kerberos 默认领域的名称是什么?RCHPWDI.COM
B这个 Kerberos 默认领域的 KDC 是什么?TOSHW2003
CKDC 的完全限定主机名称是什么?TOSHW2003.RCHPWDI.COM
DKDC 侦听的端口是什么?88 - 默认
E这个 KDC 的密码服务器的名称是什么?与上面的 B 相同
F密码服务器的端口是什么?464 - 默认
GiSeries 的服务主体名称是什么?pwd1sup
在 KDC 上创建 iSeries 主体时,应该使用以下项
HKerberos 主体的名称是什么?krbsvr400(创建
iSeries 主体时必须使用这个名称)
IiSeries 的主机名是什么?RCHASSMB
JiSeries 的完全限定主机名是什么?RCHASSMB.RCHLAND.IBM.COM
KiSeries 服务器所属的 Kerberos 默认领域的名称是什么?
(默认:域名转换为大写字母)
RCHPWDI.COM
L主体的完整名称是什么?
(krbsvr400/fully.qualified.host.name@YOUR.KERBEROS.REALM)
krbsvr400/rchassmb.rchland.ibm.com@RCHPWDI.COM
M这个主体的密码/共享密钥是什么?
(必须与 G 项相同)
pwd1sup
以下几项将用于配置企业身份映射 (Enterprise Identity Mapping, EIM)
N您希望在 IBM i 系统上创建哪种类型的基本 EIM 配置?
加入现有域
创建并加入新域
创建并加入新域
O您希望在何处配置 EIM 域,或者您希望加入哪个 EIM 域?rchassmb.rchland.ibm.com
P您希望创建或者加入的 EIM 域的名称是什么?PWDEIM
Q您是否希望为 EIM 域指定一个父 DN?
如果是,请指定父 DN
R将用作 EIM 域控制器上 LDAP 服务器中的管理员识别名称 (DN) 是什么?cn=administrator
S将用作 EIM 域控制器的 LDAP 服务器中的管理员密码是什么?pwd1sup

我们还发现,在演示所有 Kerberos 组件如何协同工作来执行 Kerberos 网络解决方案时,第 4.2 节 “Kerberos 协议提供的组件”(图 4-1)也是非常有帮助的。

图 1. Kerberos 组件

图表显示 Kerberos Key Distribution Center 或 KDC 处理用户对于票据授予票据的请求,以便从票据授予服务器获得票据,来访问系统中的服务

选择一种加密方法

最初,Kerberos 仅支持 DES 和 Triple-DES 加密。目前不再建议使用 DES,因此 PTF 增加了对于较新加密类型 AES128、AES256 和 RC4 的支持,以及对 QSYSINC 中新 KRB5 头文件的支持。

V7R1 SI42919,SI42919

V6R1 SI42957,SI42957

V5R4 SI43034,SI43034

如果您希望使用这些 PTF 提供的新型加密方法之一,则必须修改 NAS 向导创建的批处理文件,因为其默认为使用 DES。有关详细信息以及说明,请参见 PTF Cover Letter。

Active Directory

如果尚未设置 Active Directory,请按照 Microsoft 提供的这些说明来安装和创建 Active Directory。
如果您已经设置了 Active Directory,请联系 Microsoft® Windows® 管理员,确定其是否设置了特定的目录结构,以及希望存放 Kerberos 服务帐户的位置。如果是,请参阅本文末尾处自定义 AD 批处理文件的部分。

从客户端工作站加入 Windows 域

注意: 本示例使用运行 Windows Server 2003 的系统,将 Active Directory 作为 Kerberos 领域的 Key Distribution Center (KDC),因此初始登录所用的客户端系统必须能够加入 Windows 域。

并非意 味着客户端必须运行 Windows,我们也设置了一个 openSuSE v 11.1 工作站,作为 Kerberos 领域中的主登录点。YaST 是针对 openSuSE 和 SuSE Linux® Enterprise 发行版的安装和配置工具,它包含 Kerberos 设置向导。使用其工具能够在登录时允许 Linux 联系 Active Directory、获取票据授予票据 (ticket granting ticket),并访问 IBM i 上其他启用了 Kerberos 的资源(例如 HTTP 服务器)。我们还使用本文中包含的样例 Java 代码,与 IBM i 之间创建了启用 Kerberos 的 JDBC 连接。每个 Linux 发行版都可能有所不同,因此您必须在互联网中搜索有关配置您的 Linux 发行版的文章,以便将其作为主工作站加入 Kerberos 领域。

Windows 域就是共享一个中心目录数据库的多台计算机的逻辑组。这个中心数据库在 Windows 2000 和 Windows Server 2003 中称为 Active Directory,在 Windows Server 2008 和 Server 2008 R2 中称为 Active Directory 域服务,在 Windows NT 操作系统中称为 NT Directory Services (NTDS)。它包含了该域内资源的用户帐户和安全性信息。在一个域中,使用计算机的每一名人员都会得到自己惟一的帐户,即用户名。随后可以为这个帐户指 派对该域中资源的访问权限。

在域中,目录位于配置为 “域控制器” 的计算机中。域控制器就是一台服务器,它管理着用户与域之间交互的所有安全性相关方面,集中处理安全性与管理。Windows Server 域通常适合使用 10 台以上 PC 的企业和/或组织。

希望加入域安全性的工作站和服务器需要成为域成员。加入域安全性往往也称为单点登录,简写为 SSO。

下面这个链接描述了使工作站加入一个 Windows 域时必须遵循的流程:

执行 IBM i 任务

轻量级目录访问协议

LDAP 服务器必须支持 EIM 要求的特殊对象类和属性,这些类和属性是 IBM Tivoli LDAP 服务器的一部分。例如,AD 和 OpenLDAP 不具备这些模式扩展。

在我们的示例中,我们选择在 IBM i 上实现。

所选的 LDAP 服务器仅需在此时运行并保持可访问。无需进行进一步配置。

在本文中,您将在通过 System i Navigator 运行 EIM 配置向导时完成 LDAP 服务器的 EIM 配置。

讨论 EIM 配置向导的知识库文章指出,LDAP 管理员 DN 应在 EIM 向导内输入 LDAP 管理员以及 IBM i EIM 系统用户 DN 的屏幕中指定。尽管这种做法便于遵循和设置,
但 从安全性和管理的角度来看,这无疑是一种糟糕的做法。LDAP 管理员通常属于应该定期更改密码的帐户(例如 QSECOFR)。然而,如果您使用 LDAP 管理员作为 IBM i EIM 系统用户帐户,而且有人更改了 LDAP 管理员密码,EIM 将停止工作,没有任何用户能通过 Kerberos 进行身份验证。在准备工作中,最好为 EIM 设置额外的 LDAP 用户条目,并在 EIM 系统用户的 EIM 向导配置过程中指定这个帐户。通过这样的方法,您也可以通过访问控制列表 (ACL) 来控制对 LDAP 目录各个部分的访问权限(如果客户希望为其他用途的工具使用 LDAP 服务器)。

此外,从 IBM V6R1 开始,您可以配置 LDAP 服务器的多个实例。我们建议为 EIM 域控制器使用单独实例。LDAP 服务器是一个非常重要的组件。如果 EIM 域控制器无法使用,则任何用户都无法使用 SSO 进行身份验证。因此,建议将 EIM 部分分离到独立的 LDAP
服务器之中。

我 们建议处理的另外一个可用性问题就是何时要求为多个 IBM i 分区实现 SSO。在此情况下,第一个 IBM i 分区将作为 EIM 域控制器,下一个 IBM i 分区将加入第一个 IBM i 分区中的现有 EIM 域。如果第一个分区出现故障,则没有任何用户能通过第二个分区或其他分区的身份验证。强烈建议首先以传统方式设置 EIM,随后配置 LDAP 副本,并在支持 SSO 的每一个 IBM i 分区上创建 EIM 数据的副本。只要副本处于活动状态,就应该将各系统上的本地 EIM 配置更改为指向其自己的(本地)系统,并将其作为 EIM 域控制器。通过这样的方法,每个分区都能彼此独立运行。

Network Authentication Service/Enterprise Identity Management

在 上文中,我们讨论了 EIM 红皮书中的第 2 章规划工作表,以及附录 D 提供的一份空白规划工作表。如果您正确填写此工作表,那么完成 Enterprise Identity Management (EIM) 和 Network Authentication Services (NAS) 向导就会更加轻松,因为工作表中的某些值都需要填入到显示的各个屏幕中。可以在以下地址找到配置 EIM 和 NAS 的一份优秀知识库文档:

http://www-912.ibm.com/s_dir/slkbase.NSF/DocNumber /558590066。请注意,本文档中也包含一份规划工作表。看上去似乎有点多余,但无论怎样强调使用这种规划工作表的重要意义也不过分,这是多年以来 决定许多配置成败的关键所在。如果您尚未填写这份工作表,则应该立即抽时间填写,之后再继续阅读知识库文档。红皮书的第 2.4 节说明了在何处能够获得该工作表的信息。此外,您还应阅读红皮书资料的第 2.2.2 节 “时间/SNTP”,确保您的 IBM i 能与 SNTP 服务器通信,并且通过 QTIMZON 系统值配置了正确的时区。(在 IBM i 最新版本中,QTIMZON 能够自动将 QUTCOFFSET 调整为正确的值。)

在上述 EIM/NAS 配置的第 J 步引用了知识库文档,您将使用向导来创建一个批处理文件 (.bat),必须将该文件复制到 Active Directory 机器并运行。创建该 .bat 文件的目的是为了在 Active Directory 机器上运行 ktpass 语句,设置您在 NAS 中配置的服务主体。与手动键入 ktpass 命令相比,该操作更加容易,且不易出错。如果 Windows 管理员已经设置了一种特定的目录结构,以及想要存放 Kerberos 服务帐户的位置,请在运行之前参阅文章末尾处有关自定义 AD 批处理文件的部分。

知识库文档中也有一节介绍如何使用 QSH 中的 keytab listkinit -k 命令验证 NAS 配置。为您配置的所有服务主体(krbsvr400、http 等)执行这样的验证,并纠正此时发现的所有错误都是非常重要的。纠正错误可能包括迭代式运行 NAS 配置、执行 DNS 更改、执行 Active Directory 更改,或者修正其他问题,例如 IBM i 与 Active Directory 机器之间的时间偏差。通过确保在此时正确配置 NAS,即可避免 NAS 在流程稍后的步骤中造成问题。如果您稍后遇到了问题,始终可以返回此处,并重新运行 NAS 验证来确保一切正确。KB 文档中的最后一项是设置 EIM 映射,即将您的 IBM i 用户 ID 映射到 Active Directory 中设置的用户 ID。最后,您应该检查 IBM i 中的系统值 QRMTSIGN,该值应设置为 *VERIFY。如果将其设置为 *FRCSIGNON,则会覆盖您配置单点登录的所有操作,并始终显示单点登录提示。

在 NAS 配置过程中,您将看到以下警告屏幕。也就是说,客户端与服务器对于主机名的解析各有不同。在本文展示的示例中,请注意共列出了两个不同的主机名。我们发 现,尽管在遇到这个错误时,仍然可以继续 NAS 向导,但最好返回并解决 DNS 中的冲突源头,或者客户端或服务器中的主机表。我们在绕过主机名冲突屏幕时会遇到一个错误,且 krbsvr400 能正常工作,但 HTTP 主体无法连接。

图 2. NAS 向导主机名冲突

NAS 向导中显示客户端解析的主机名与 i5/OS 解析的主机名不同的警告屏幕。为获得最佳效果,请使用 Back 按钮返回并解决问题,而非单击 Next。

图 3. 使用 kinit -k 验证 NAS 配置时的常见错误:
错误解决方法
EUVF06014E 无法获得初始凭据。
状态 0x8.8x - s。
在 Network Authentication Services (NAS) 选项的 General 选项卡中,必须选中 Use TCP 选项。
EUVF06014E - 其他状态代码红宝书附录 B 中列出了其他状态代码
EUVF06007E 无法获得默认凭据缓存的名称导致这个问题的原因之一就是运行 kinit 的用户未配置主目录,例如 /HOME/userid。kinit 将在包含默认凭证缓存路径的目录中查找名为 krb5ccname 的文件。

错误 CWB0999 RC8999 表示以下问题之一:

1. DES 加密未启用。

2. Active Directory 中的 kbsvr400 帐户需要使用 Network Authentication Services (NAS) 配置中设置的密码重置。

3. 确认 AD 帐户已设置为 “Use DES Encryption”:http://support.microsoft.com/kb/977321

在 默认情况下,Kerberos 身份验证的数据加密标准 (Data Encryption Standard, DES) 加密在 Windows 7 和 Windows Server 2008 R2 中是禁用的。这份 MS 技术文档描述了由于 DES 加密被禁用而导致应用程序、安全性和系统日志中可能收到以下事件的各种场景:

•KDCEVENT_UNSUPPORTED_ETYPE_REQUEST_TGS

•KDCEVENT_NO_KEY_INTERSECTION_TGS

此外,该文档还解释了如何在 Windows 7 和 Windows Server 2008 R2 中启用 Kerberos 身份验证的 DES 加密。如需获得具体信息,请参阅这份技术文档的 “症状”、“原因” 和 “解决方法” 部分。

启用 IBM i 应用程序

SSO 5250 会话

如果您正在使用 Windows Server 2003,在尝试配置 5250 Emulation 会话之前,建议您安装 kerbtrayKerbtray 是一种实用工具,能够显示 KDC 为您 PC 提供的票据。以下是获得该实用工具的链接。除了 kerbtray 之外,下载 (Windows Server 2003 Resource Kit Tools) 中还包含其他实用工具。
Windows Server 2003 Resource Kit Tools:

没 有适用于 Windows Server 2008 的可下载资源包。Microsoft 声明 “不同于之前的操作系统,在 Windows Server 2008 和 Windows Server 2008 R2 中,资源包工具是作为服务器角色安装的一部分进行安装的。 在过去,您必须单独下载资源包工具。

诸如 kerbtray 等工具在 Windows Server 2008 和 Windows Server 2008 R2 版本中均有相应的替代品。Kerbtray 不再属于这个工具集的一部分,但可以使用 klist 来完成该工具之前执行的许多任务。”

http://social.technet.microsoft.com/wiki/contents/articles/windows-server-2008-and-windows-server-2008-r2-support-tools-dsforum2wiki.aspx

在加入启用 Kerberos 的域的 Windows PC 中安装和调用 kerbtray 之后,系统托盘中将出现一个绿色图标,如下所示:

图 4. Kerbtray 图标

系统托盘中显示一个长方形的绿色图标,表示 Kerbtray 已正确安装。如果 kerbtray 无法从 KDC 获得票据,则此图标将显示如下:

图 5. 无法获取票据时的 Kerbtray 图标

在无法获取票据时,Kerbtray 图标将更改为两个黄色问号。如果单击右键并选择列表票据,则显示效果如下:

图 6. Kerberos 票据列表

Kerberos Ticket 窗口的图表,顶端显示了客户主体及其票据。下半部分显示了服务主体及服务名称。您应看到票据授予票据。本例中是 krbtgt/RCHPWDI.COM

如果您未从 KDC 获得 TGT,请勿继续尝试为任何应用程序配置 EIM,因为必须具备 TGT 才能继续。

如果您未收到 TGT,Wireshark(参阅参考资料)跟踪记录将是最有用的原因调查工具。
只要获得了 TGT,即可按照以下步骤为 Kerberos 身份验证配置 5250 Emulation 会话:

图 7. 配置 5250 仿真

5250 Emulation 会话视图,显示打开的 Communication 菜单和选中的 Configure 选项。

图 8. 配置 5250 仿真属性

配置屏幕的细节,显示了要选择的 Properties 按钮的位置。

图 9. 配置 5250 仿真登录

包含必要选项的连接屏幕,选择了使用 Kerberos 主体名称,不提示。如 果您遇到了更多的问题,使用 Wireshark 跟踪记录始终会是一种不错做法。此外,可以检查域控制器、AD 服务器和 PC 中的事件日志,以及 QZSOSIGN 作业日志中所有 Kerberos 错误消息。如果错误来自 IBM System I Access for Windows(通常具有 CWB 前缀),可以执行 Start > Programs > IBM System i Access for Windows > Service > Error and Trace Message Help,从中获得更多相关信息

SSO NetServer

SSO iNav

请按照以下步骤为 Kerberos 身份验证配置 System i Navigator (iNav):

图 10. 配置 System i Navigator

System i Navigator 显示了展开的 My Connections,以及用户右键单击系统名称时的上下文菜单。菜单中选中了 Properties 选项。

图 11. 配置 System i Navigator 登录

Properties 屏幕,显示选中的 Connection 选项卡,以及 Use Kerberos principal name, no prompting 单选按钮。

WebSphere V6R1

至此,EIM 已经完成了配置,可正常运行。下面我们将 SSO 纳入 WebSphere。我们使用 i5/OS V6R1 上的 WebSphere V6.1。

使用以下出版物作为指南:5761-XH2 V6R1 System i Access for Web

使用 WebSphere SPNEGO 支持的 System i Access for Web 单点登录

尽管我们并不关注启用 System i Access for Web 单点登录,但此文档描述了 Windows server 和 WebSphere 中需要完成的步骤。

从第 2.5 节 “创建 HTTP 服务主体” 开始,到第 3.4 节 “配置 SPNEGO TAI” 结束

值得注意的事项包括,第 19 页 “创建由 JGSS 使用的 Kerberos 配置文件:” 信息之后有一处拼写错误。这段内容提到了一个名为 “spnego.krb5.keytab” 的文件。该文件应该命名为 spnego.krb5.conf。随后,文档中为此文件提供值。请务必在填充 spnego.krb5.conf 时,使以下内容位于同一行中,而非像该文档所示的位于各自单独行中。

 default_keytab_name =
  FILE:/QIBM/UserData/OS400/NetworkAuthentication/keytab/HTTP_systemName.keytab

在此提供我们的 spnego.krb5.conf 文件,供您参考:

[libdefaults] 
default_realm = RCHPWDI.COM 
default_keytab_name =   
FILE:/QIBM/UserData/OS400/NetworkAuthentication/keytab/  
HTTP_rchassmb.keytab 
default_tkt_enctypes = des-cbc-md5 rc4-hmac 
default_tgs_enctypes = des-cbc-md5 rc4-hmac 
kdc_default_options = 0x54800000 
[realms] 
RCHPWDI.COM = { 
kdc = TOSHW2003.RCHPWDI.COM:88 
default_domain = rchland.ibm.com 
} 
[domain_realm] 
.rchland.ibm.com = RCHPWDI.COM

第 30 页中提供了使用安全性配置向导的说明。安全性向导的第 2 页演示了独立 LDAP 注册表的使用。无论您使用的是否是 i5/OS 中的目录服务器,您都应该做出这样的选择。在这一步中,您需要连接到 Microsoft Active Directory 中的 LDAP 服务器。

我们使用 Ldp.exe,这是一种 Windows Support Tool 实用工具,可用于对 Active Directory 执行轻量级目录访问协议 (LDAP) 搜索,根据给定搜索条件查找特定信息。

使用 Ldp.exe 查找 Active Directory 中的数据:

http://support.microsoft.com/kb/224543

在确定 Base 和 Bind 识别名语法时,这种工具非常有用。

接下来您需要查看第 4.6 节 “配置域帐户浏览器设置”。

配置 WebSphere 安全性之后,即可使用 snoop servlet 进行验证。如果要求您提供用户名和密码,则表示 SSO 未成功实现。

这就要求我们执行调试步骤。我们发现第 5 节非常有用,特别是第 5.3 节 “SPNEGO 组件的诊断跟踪记录设置”。我们发现,跟踪记录信息非常有用。

IBM Toolbox for Java

至此,EIM 已经完成了配置,可正常运行。下面,我们将使用 IBM Java Toolbox 来对 IBM i V6R1 上的 DB2 建立 SSO 连接。

我 们提供了样例代码,演示将 Kerberos 票据与 IBM Toolbox for Java 一起使用,以便登录到 IBM i。下面是两个样例方法。第一个样例使用内置的 Toolbox 代码获取 Kerberos 票据。第二个样例使用 JGSS 手动获取 Kerberos 票据,并将其传递给 Toobox 代码。

您需要更改样例代码的 main() 部分,使之能在您的环境中正常工作。具体来说,以下三个系统属性的值需要更新。以与您的环境相匹配:

- java.security.krb5.realm(规划工作表 A 项)

- java.security.krb5.kdc(规划工作表 B 项)

- KRB5CCNAME(仅用于样例 2)

此外,两个样例方法中均需更新 AS400() 构造函数,以便使用您的 IBM i 系统的名称。

除了所需的编码更改之外,必须为 Kerberos 配置 IBM i。您还需要正确设置以下各项。

1. 在运行代码、正确添加到 Windows 域中的 PC 中,将一个 krb5.ini 文件添加到 C:\WINDOWS 目录中。

我们添加了一个 krb5.ini 示例文件,供您参考。

可下载的代码:krb5.ini

2. 我们遇到了一个情景,Microsoft 禁止使用一个接口从 Kerberos 安全包中检索票据授予票据/会话键对。这迫使我们更改 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters 中的注册表值 allowtgtsessionkey。下面的文档中记录了这一问题:

http://support.microsoft.com/kb/308339

3. 在 PC 上创建两个环境变量:USER.HOME 和 USER.NAME。

Java kinit 命令需要通过这两个环境变量将主体凭据存储在缓存之中。这是运行样例 2 的关键需求。

USER.HOME 是 kinit 存放凭据文件的目录,文件名以 krb5cc_ 开始,以 USER.NAME 环境变量值结束。USER.NAME 的值应该使用小写字母输入。在下面的示例中,凭据文件是 C:\Documents and Settings\jahrens\krb5cc_jahrens

图 12. 为 Toolbox 设置 PC 环境变量

环境变量屏幕的图像,显示将 USER.HOME 设置为用户的主目录,将 USER.NAME 设置为用于登录 PC 的用户 ID4. 此时,我们建议在 PC 上运行 kinit 命令。kinit 命令是 JVM 的一部分。例如,我们使用 IBM JVM 1.6。在本例中,kinit 位于 C:\Program Files\IBM\Java60\jre\bin

下面是成功运行 kinit 命令的一个示例(您必须为用户输入密码)。

C:\Documents and Settings\jahrens>kinit 
Password for jahrens@RCHPWDI.COM:  
Done! 
New ticket is stored in cache file C:\Documents and Settings\jahrens\krb5cc_jahrens

如果 kinit 命令未成功执行,请纠正错误并再次运行命令。除非 kinit 成功完成,否则不应继续操作。为了协助调试,kinit 命令将使用 C:\Windows 目录下的 krb5.ini 文件中找到的值。

注意!样例 2 要求成功完成 kinit,之后才能成功调用和运行。

5. 我们仅在使用 IBM JDK/JRE 时取得了成功。使用 Sun JDK/JRE 时未能成功。

这些样例惟一的外部依赖项就是 Toolbox/JTOpen jar 文件 (jt400.jar) 和 JGSS(包含于 JRE 1.4 及更高版本中)。

可以通过 (JTOpen) 网站或者 /QIBM/ProdData/HTTP/Public/jt400/lib/ 中您 IBM i 上的 IFS 中获得 jt400.jar 文件。

其他样例代码

使用 EIM API 的样例代码

信息中心包含使用 C 语言编写的许多 EIM API 样例。然而,这些样例中通常仅仅包含一个函数。而在现实中,您通常必须在一个程序内组合多个函数,以便通过 API 实现一些有用的功能。

下 面给出的源代码将几个 API 组合在一起,最终运行了 eimGetTargetFromSource API,可以用于将登录到客户端(源)所需的域配置文件映射到登录到另外一个平台或应用程序(目标)的配置文件。在示例中,您将看到,必须与其他 API 共同使用才能完成此操作。

访问 Windows 默认凭据缓存

如果您正在编写一个基于 Windows 的应用程序,需要从启用了 Kerberos 的服务器请求服务,那么可能就需要从默认 Windows 凭据缓存中获取票据授予票据。TGS_request 必须获得 TGT 才能获取服务票据。我们所遇到的问题在于,没有任何可用文档准确说明了如何获得 TGT,在 Windows 上,TGT 默认处于内存中的一个凭据缓存内,且从不会写入文件。我们知道,必然存在一组函数,但只能通过 Google 搜索来找到它们。最终得出了结论,即 Microsoft 提供的 klist 实用工具必然包含一些能够满足我们的需求(或接近于我们需要)的代码,因此我们集中精力查找 klist 的源代码。我们在 Microsoft Windows 7.0 SDK(可从 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=3138 下载)的样例源中找到了源代码。如果您安装了 Windows 7.0 SDK,则 klist.c 源代码会位于 C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\security\authorization\klist 中。

这里我们不会复制所有 klist 源代码,而是指出源代码中的一些关键元素。

我们特别关注的函数调用如下:

  • LsaConnectUntrusted - 返回登录句柄
  • LsaLookupAuthenticationPackage - 使用登录句柄和待缓冲区的名称,会返回一个包 ID
  • LsaCallAuthenticationPackage - 使用登录句柄和包 ID,返回信息缓冲区,包括所请求的票据在内

查看 klist 源代码即可了解这些函数调用是如何编写的。

我们在调用 klist 以获得 TGT 中使用的参数如下:

get krbtgt/RCHPWDI.COM,其中 RCHPWDI.COM 是默认领域的名称。

GetEncodedTicket 函数中包含大量 printf 语句,用于调用 LsaCallAuthenticationPackage。它们将解析票据结构,将其分段显示。下面给出了 RFC 1510 定义的票据结构:

typedef struct _KERB_EXTERNAL_TICKET { 
 PKERB_EXTERNAL_NAME ServiceName;  
 PKERB_EXTERNAL_NAME TargetName;  
 PKERB_EXTERNAL_NAME ClientName;  
 UNICODE_STRING      DomainName;  
 UNICODE_STRING      TargetDomainName;  
 UNICODE_STRING      AltTargetDomainName;  
 KERB_CRYPTO_KEY     SessionKey;  
 ULONG               TicketFlags;  
 ULONG               Flags;  
 LARGE_INTEGER       KeyExpirationTime;  
 LARGE_INTEGER       StartTime;  
 LARGE_INTEGER       EndTime;  
 LARGE_INTEGER       RenewUntil;  
 LARGE_INTEGER       TimeSkew;  
 ULONG               EncodedTicketSize;  
 PUCHAR              EncodedTicket; 
 } KERB_EXTERNAL_TICKET, *PKERB_EXTERNAL_TICKET

自定义 AD 批处理文件

对于必须复制到 Active Directory 机器中并运行的批处理文件 (.bat),在某些情况下,Windows 管理员已经设置了特定的目录结构以及要存放 Kerberos 服务帐户的位置。这通常与批处理文件不符。下面通过一个示例来明确展示这种情况。

例如,将以下条目纳入我们的批处理文件 (.bat):

DSADD user cn=rchassmb_1_krbsvr400,cn=users,dc=RCHPWDI,dc=COM -pwd PWD1SUP -display rchassmb_1_krbsvr400

KTPASS -MAPUSER rchassmb_1_krbsvr400 -PRINC krbsvr400/rchassmb.rchland.ibm.com@RCHPWDI.COM -PASS PASSWORD -mapop set +DesOnly -ptype KRB5_NT_PRINCIPAL

在这种情况下,创建新帐户 rchassmb_1_krbsvr400 的默认位置是:

root

!-> RCHPWDI.COM

!-> Users

!-> rchassmb_1_krbsvr400

通常情况下,Windows 管理员会设置一个结构,根据组织边界或者其他条件来组织 LDAP 条目。

例如:

root

!-> RCHPWDI.COM

!-> IT

!-> Operator

!-> System Administrators

!-> Technical Users

!-> Rochester

!-> Sales

!-> Marketing

!-> Support

etc.

随后,Windows 管理员将提供应用于存放 Kerberos 服务帐户的目录中的位置路径。

例如,Technical Users。在这种情况下,前例中的命令将如下所示:

DSADD user "cn=rchassmb_1_krbsvr400,ou=Technical Users,ou=IT,dc=RCHPWDI,dc=COM" -pwd PWD1SUP -display rchassmb_1_krbsvr400

KTPASS -MAPUSER rchassmb_1_krbsvr400 -PRINC krbsvr400/rchassmb.rchland.ibm.com@RCHPWDI.COM -PASS PASSWORD -mapop set +DesOnly -ptype KRB5_NT_PRINCIPAL

这就要求在 NAS 向导创建此文件之后手动编辑批处理文件。

参考资料

IBM Lab Services

特此感谢 Lab Services 为使用 IBM Java Toolbox 实现 EIM 提供了核心编码技术。Lab Services 可帮助您满足所有 IBM i 需求,包括 EIM 配置在内。

IBM Systems Lab Services and Training 能够帮助提供有关全球一流的信息技术工作方式的知识。他们注重于通过设计灵活的基础架构来降低成本,同时利用深厚的技术技能和培训经验来管理风险。

他们能够帮助优化数据中心和系统解决方案的利用率。他们主要关注于 IBM 产品开发实验室推出的新技术,并交付和培训重要的新细分市场、以及成熟和终结的市场技术。

他 们与其他 IBM 服务机构(Global Technology Services、Global Business Services、Sales & Distribution、Software Group 和 IBM Business Partners)通力协作。如需了解更多信息,请访问其网站 www.ibm.com/systems/services/labservices,或者通过 stgls@us.ibm.com 取得联系。

Lab services 产品/工具:

  • EIM Populator Tool
  • EIM Management Tool
  • 自动化 EIM 标识符创建与删除的退出程序
  • SSO 实现咨询服务

Wireshark

查看网络中实际收发的数据允许您确认设置是否正确,并确认您获得的是票据,而非错误消息。Wireshark 为您提供了这方面的支持,我们对这种工具的应用十分广泛。它是一种开放源码的工具,可通过以下地址下载:

wireshark 下载

设置和操作说明:

查看 Wireshark 跟踪记录时,有必要理解以下流程。

图 13. Kerberos 数据流

图表显示 Kerberos Key Distribution Center 或 KDC 处理用户请求的票据授予票据。接下来,将票据授予票据发送至请求在服务器 1 上使用服务 A 的 Ticket Granting Server。TGS 将为服务 A 返回一个票据。最后,该票据将发送至服务器 1,允许用户访问其中的服务 A。服务 A 向用户发送一个票据,证明其已经连接到实际的服务 A

结束语

本 文介绍了如何在 IBM i 平台上设置单点登录 (SSO),SSO 支持 5250 emulation、iSeries Navigator、WebSphere Application Server 和 Toolbox for Java 等常用应用程序。现在,用户可以登录到主工作站,随后不必再次登录即可访问其他系统和应用程序。尽管有一些组件必须协同工作,但您已经了解了如何验证每一 个组件是否正常工作,之后再添加下一个组件。

下载

描述名字大小
使 Java Toolbox 处理 GSS 凭证KerberosSample1.java7.0KB
在 Java 中使用您自己的 GSS 凭证KerberosSample2.java5.0KB
使用 C 语言编写 eimGetTargetFromSource APIEIM_APIs.txt5.0KB