脚本化密匙管理
![](/icons/60994de.gif)
![](/icons/60994yi.gif)
个案例研究
我最近进行
![](/icons/60994de.gif)
![](/icons/60994yi.gif)
个咨询工作包括
![](/icons/60994yi.gif)
个任务
![](/icons/60994dou.gif)
需要在两个队列管理器的间建立
![](/icons/60994yi.gif)
些 SSL 通道
![](/icons/60994dou2.gif)
这个任务
![](/icons/60994de.gif)
标准操作流程是对几乎所有管理任务使用交互式工具
![](/icons/60994dou.gif)
因此我
![](/icons/60994de.gif)
客户认为我们将使用 iKeyman GUI 完成钥匙环
![](/icons/60994de.gif)
创建和所有
![](/icons/60994de.gif)
证书任务
![](/icons/60994dou2.gif)
当我建议使用脚本替代时
![](/icons/60994dou.gif)
他们还有些不愿意
他们
![](/icons/60994de.gif)
主要反对理由是管理团队(Team)大多都不熟悉脚本工具
![](/icons/60994dou2.gif)
他们
![](/icons/60994de.gif)
潜在意思是
![](/icons/60994dou.gif)
脚本解决方案将会提高管理证书需要
![](/icons/60994de.gif)
最低技术水平
![](/icons/60994dou2.gif)
相比的下
![](/icons/60994dou.gif)
他们认为 GUI 是更容易、更恰当
![](/icons/60994de.gif)
解决方案
![](/icons/60994dou2.gif)
除此的外
![](/icons/60994dou.gif)
还有
![](/icons/60994yi.gif)
个问题:脚本解决方案能够最有效地利用资源吗?我对我
![](/icons/60994de.gif)
客户说
![](/icons/60994dou.gif)
和使用 GUI 完成相同
![](/icons/60994de.gif)
管理任务相比
![](/icons/60994dou.gif)
编写脚本将花费同样多(也许更多)
![](/icons/60994de.gif)
时间
![](/icons/60994dou2.gif)
脚本编写在大型部署中
![](/icons/60994de.gif)
价值是有目共睹
![](/icons/60994de.gif)
![](/icons/60994dou.gif)
但是对于只涉及两个队列管理器
![](/icons/60994de.gif)
任务
![](/icons/60994dou.gif)
他们认为进行额外投资简直是在浪费时间
![](/icons/60994dou2.gif)
业务需求是促成这个决策
![](/icons/60994de.gif)
根本原因
![](/icons/60994dou2.gif)
由于 MD5 散列法已经被破坏
![](/icons/60994dou.gif)
客户明智地规定
![](/icons/60994dou.gif)
所有密匙必须使用 SHA-1 签名
![](/icons/60994dou2.gif)
但 GUI 工具不能公开那些支持选择证书签名算法
![](/icons/60994de.gif)
Control控件
![](/icons/60994dou.gif)
因此默认支持 MD5 签名
![](/icons/60994dou2.gif)
修改 GUI 中
![](/icons/60994de.gif)
这个行为需要编辑 iKeyman 和 Java™ 配置文件
![](/icons/60994dou2.gif)
相比的下
![](/icons/60994dou.gif)
包括 –sigalg 选项
![](/icons/60994de.gif)
命令行工具使得选择签名算法变得异常简单
![](/icons/60994dou2.gif)
当我们最终开始工作后
![](/icons/60994dou.gif)
事实证明客户
![](/icons/60994de.gif)
担忧根本就是杞人忧天
![](/icons/60994dou2.gif)
多数脚本都是自我归档
![](/icons/60994de.gif)
(self-documenting)
![](/icons/60994dou.gif)
不需要复杂
![](/icons/60994de.gif)
逻辑
![](/icons/60994dou2.gif)
它们只包含
![](/icons/60994yi.gif)
个经过注释
![](/icons/60994de.gif)
命令列表
![](/icons/60994dou.gif)
没有任何分支和循环
![](/icons/60994dou2.gif)
对于管理员来说
![](/icons/60994dou.gif)
学习脚本并不比学习 GUI 困难
![](/icons/60994dou.gif)
甚至更加容易
![](/icons/60994dou2.gif)
而且
![](/icons/60994dou.gif)
我们需要
![](/icons/60994de.gif)
资源也相当少
![](/icons/60994dou.gif)
![](/icons/60994yinwei.gif)
我
![](/icons/60994de.gif)
上
![](/icons/60994yi.gif)
个任务
![](/icons/60994de.gif)
![](/icons/60994yi.gif)
些脚本正好可以满足我们
![](/icons/60994de.gif)
需求
![](/icons/60994dou2.gif)
不到 3个小时
![](/icons/60994de.gif)
时间内我们就完成了 SSL 配置
![](/icons/60994dou.gif)
还包括调整脚本和培训执行密匙管理任务
![](/icons/60994de.gif)
职员
![](/icons/60994dou2.gif)
![](/icons/60994yi.gif)
个月的后
![](/icons/60994dou.gif)
队列管理器迁移到新
![](/icons/60994de.gif)
服务器并进行了重构
![](/icons/60994dou2.gif)
使用
![](/icons/60994yi.gif)
个可重复
![](/icons/60994de.gif)
、
![](/icons/60994yi.gif)
致
![](/icons/60994de.gif)
和准确
![](/icons/60994de.gif)
流程
![](/icons/60994dou.gif)
管理员就能够重用这些脚本
![](/icons/60994dou.gif)
在
![](/icons/60994yi.gif)
个小时的内在新
![](/icons/60994de.gif)
队列管理器上独自建立 SSL 通道
![](/icons/60994dou2.gif)
我们
![](/icons/60994de.gif)
投资在第
![](/icons/60994yi.gif)
次重用时就得到了回报
![](/icons/60994dou2.gif)
在
![](/icons/60994smhl.gif)
任务:消息传递
![](/icons/60994smhr.gif)
系列
![](/icons/60994de.gif)
这个部分
![](/icons/60994dou.gif)
我将和您
![](/icons/60994yi.gif)
起完成使用自签名证书配置基本 SSL 通道
![](/icons/60994de.gif)
任务
![](/icons/60994dou.gif)
我们将构建两个脚本
![](/icons/60994dou2.gif)
这样
![](/icons/60994dou.gif)
当您需要建立 IBM® WebSphere® MQ SSL 通道
![](/icons/60994de.gif)
时候
![](/icons/60994dou.gif)
您也能够在
![](/icons/60994yi.gif)
小时的内使您
![](/icons/60994de.gif)
第
![](/icons/60994yi.gif)
个通道配对并运行
![](/icons/60994dou2.gif)
有关证书类型
使用 CA 签名
![](/icons/60994de.gif)
证书配置 SSL 和使用自签名证书类似
![](/icons/60994dou.gif)
但创建
![](/icons/60994de.gif)
安全策略差别很大
![](/icons/60994dou2.gif)
创建自签名证书时
![](/icons/60994dou.gif)
也就创建了
![](/icons/60994yi.gif)
个 Deny-All 策略
![](/icons/60994dou2.gif)
添加到密匙环
![](/icons/60994de.gif)
每
![](/icons/60994yi.gif)
个证书都是这个策略
![](/icons/60994de.gif)
![](/icons/60994yi.gif)
个例外
![](/icons/60994dou2.gif)
授权访问需要添加
![](/icons/60994yi.gif)
个证书
![](/icons/60994dou2.gif)
撤销访问需要删除
![](/icons/60994yi.gif)
个证书
![](/icons/60994dou2.gif)
使用自签名证书
![](/icons/60994dou.gif)
MQ 管理员必须采取特定
![](/icons/60994de.gif)
动作对
![](/icons/60994yi.gif)
个给定
![](/icons/60994de.gif)
证书进行授权访问
![](/icons/60994dou2.gif)
所有访问控制决策取决于管理员
![](/icons/60994dou2.gif)
使用由 CA 签名
![](/icons/60994de.gif)
证书时
![](/icons/60994dou.gif)
![](/icons/60994yi.gif)
个有效
![](/icons/60994de.gif)
策略就是针对每个信任
![](/icons/60994de.gif)
CA(认证机构)使用 Allow-All 策略
![](/icons/60994dou2.gif)
换句话说
![](/icons/60994dou.gif)
对
![](/icons/60994yi.gif)
个密匙环添加
![](/icons/60994yi.gif)
个 CA 将对那个 CA 已经签名
![](/icons/60994de.gif)
或未来即将签名
![](/icons/60994de.gif)
每个证书建立
![](/icons/60994yi.gif)
个信任策略
![](/icons/60994dou2.gif)
限制信任范围需要使用通道
![](/icons/60994de.gif)
SSLPEER 属性为这个证书中
![](/icons/60994de.gif)
Distinguished Name(DN
![](/icons/60994dou.gif)
可分辨名称)字段指定可以接受
![](/icons/60994de.gif)
值
![](/icons/60994dou2.gif)
撤销访问需要
![](/icons/60994yi.gif)
个 Cert
![](/icons/60994if.gif)
icate Revocation List(简称为 CRL)
![](/icons/60994dou2.gif)
当
![](/icons/60994yi.gif)
个 CA 撤销
![](/icons/60994yi.gif)
个证书时
![](/icons/60994dou.gif)
撤销操作被发布给 CRL
![](/icons/60994dou2.gif)
那个 CA
![](/icons/60994de.gif)
客户在内部对 CRL 执行镜像
![](/icons/60994dou.gif)
队列管理员可以在通道启动时在内部检查这个 CRL
![](/icons/60994dou2.gif)
如果
![](/icons/60994yi.gif)
个通道企图使用
![](/icons/60994yi.gif)
个已撤销
![](/icons/60994de.gif)
证书启动
![](/icons/60994dou.gif)
对 CRL
![](/icons/60994de.gif)
本地副本
![](/icons/60994de.gif)
检查将生成
![](/icons/60994yi.gif)
个
![](/icons/60994cuowu.gif)
![](/icons/60994dou.gif)
这个连接将被拒绝
![](/icons/60994dou2.gif)
使用由 CA 签名
![](/icons/60994de.gif)
证书时
![](/icons/60994dou.gif)
MQ 管理员只控制允许连接
![](/icons/60994de.gif)
Distinguished Names (DN)
![](/icons/60994de.gif)
![](/icons/60994zifu.gif)
串匹配模板
![](/icons/60994dou2.gif)
CA 发出
![](/icons/60994de.gif)
带有匹配 DN 值
![](/icons/60994de.gif)
任何新
![](/icons/60994de.gif)
证书都能够进行连接
![](/icons/60994dou2.gif)
阻止这种操作
![](/icons/60994de.gif)
惟
![](/icons/60994yi.gif)
可用Control控件就是 CRL
![](/icons/60994dou2.gif)
使用由 CA 签名
![](/icons/60994de.gif)
证书时
![](/icons/60994dou.gif)
必须维护 CRL
![](/icons/60994dou.gif)
![](/icons/60994yinwei.gif)
它是排除已损坏证书
![](/icons/60994de.gif)
惟
![](/icons/60994yi.gif)
思路方法
![](/icons/60994dou2.gif)
许多有关 SSL
![](/icons/60994de.gif)
讨论都提到要根据成本或涉及
![](/icons/60994de.gif)
流程来选择证书类型
![](/icons/60994dou2.gif)
通常
![](/icons/60994dou.gif)
这种思路方法将原型化自签名证书(
![](/icons/60994yinwei.gif)
它们可以轻松地免费生成)
![](/icons/60994dou.gif)
然后在后续阶段切换为由 CA 签名
![](/icons/60994de.gif)
证书
![](/icons/60994dou2.gif)
实际上
![](/icons/60994dou.gif)
证书类型
![](/icons/60994de.gif)
选择应该基于理想
![](/icons/60994de.gif)
安全策略和企业是否准备好建立和维护
![](/icons/60994yi.gif)
个证书撤销列表
![](/icons/60994dou2.gif)
从安全角度讲
![](/icons/60994dou.gif)
最好先使用
![](/icons/60994yi.gif)
个 Deny-All 策略然后再授权例外
![](/icons/60994dou.gif)
而不是先使用
![](/icons/60994yi.gif)
个 Allow-All 策略然后再构建
![](/icons/60994yi.gif)
个黑名单
![](/icons/60994dou2.gif)
基于上述原因
![](/icons/60994dou.gif)
我倾向于使用自签名证书
![](/icons/60994dou.gif)
这也是本文将讨论
![](/icons/60994de.gif)
证书
![](/icons/60994dou2.gif)
流程概述
根据本文
![](/icons/60994de.gif)
目
![](/icons/60994de.gif)
![](/icons/60994dou.gif)
我将使用两个队列管理器
![](/icons/60994dou.gif)
我把它们称为 QMA 和 QMB
![](/icons/60994dou2.gif)
在较高
![](/icons/60994de.gif)
层次上
![](/icons/60994dou.gif)
使用自签名证书构建
![](/icons/60994yi.gif)
个新
![](/icons/60994de.gif)
WebSphere MQ SSL 配置需要以下步骤:
为 QMA 创建
![](/icons/60994yi.gif)
个默认
![](/icons/60994de.gif)
密匙环
![](/icons/60994dou2.gif)
从这个密匙环删除默认 CA 证书
![](/icons/60994dou2.gif)
为 QMA 生成
![](/icons/60994yi.gif)
个自签名证书
![](/icons/60994dou2.gif)
提取这个新证书
![](/icons/60994de.gif)
公共密匙
![](/icons/60994dou2.gif)
对 QMB 重复 1-4 步
![](/icons/60994dou2.gif)
将 QMB
![](/icons/60994de.gif)
公共密匙导入 QMA
![](/icons/60994de.gif)
密匙环
![](/icons/60994dou2.gif)
发出 QMA 上
![](/icons/60994de.gif)
REFRESH SECURITY TYPE (SSL)
![](/icons/60994dou2.gif)
对 QMB 重复 6-7 步
![](/icons/60994dou2.gif)
步骤 1-4 是任何新
![](/icons/60994de.gif)
队列管理器
![](/icons/60994de.gif)
必要步骤
![](/icons/60994dou.gif)
也是
![](/icons/60994yi.gif)
个单
![](/icons/60994yi.gif)
脚本
![](/icons/60994de.gif)
自然选择
![](/icons/60994dou2.gif)
尽管步骤 6-7 可以写入脚本
![](/icons/60994dou.gif)
但有时候会出现这种情况 —— 必须将许多公共密匙导入
![](/icons/60994yi.gif)
个密匙环
![](/icons/60994dou.gif)
但在每个公共密匙的后发送
![](/icons/60994yi.gif)
个 REFRESH SECURITY 未必是
![](/icons/60994yi.gif)
个好主意
![](/icons/60994dou2.gif)
因此
![](/icons/60994dou.gif)
步骤 6 应该是
![](/icons/60994yi.gif)
个单独
![](/icons/60994de.gif)
脚本
![](/icons/60994dou2.gif)
我们将编写文档介绍说明发送 REFRESH SECURITY 命令
![](/icons/60994de.gif)
条件
![](/icons/60994dou.gif)
该命令可以根据您
![](/icons/60994de.gif)
喜好从命令行或您钟爱
![](/icons/60994de.gif)
管理工具运行
![](/icons/60994dou2.gif)
但这主要是
![](/icons/60994yi.gif)
个个人偏好问题
![](/icons/60994dou.gif)
因此如果您愿意
![](/icons/60994dou.gif)
可以将 REFRESH SECURITY 添加为第 2个脚本
![](/icons/60994de.gif)
最后
![](/icons/60994yi.gif)
步
![](/icons/60994dou2.gif)
进入脚本的后
![](/icons/60994dou.gif)
还有几个细节问题
![](/icons/60994dou.gif)
我将在后面进行介绍
![](/icons/60994dou2.gif)
公共脚本头部
尽管本文只涉及密匙和证书管理任务中
![](/icons/60994de.gif)
很小
![](/icons/60994de.gif)
![](/icons/60994yi.gif)
块内容
![](/icons/60994dou.gif)
但脚本编写
![](/icons/60994de.gif)
目
![](/icons/60994de.gif)
是创建可以重用
![](/icons/60994de.gif)
工具
![](/icons/60994dou2.gif)
因此
![](/icons/60994dou.gif)
每个脚本将包括
![](/icons/60994yi.gif)
个头部
![](/icons/60994dou.gif)
您将在这个头部中设置执行命令所需
![](/icons/60994de.gif)
任何变量
![](/icons/60994dou2.gif)
重用性还会影响到您将要处理密匙环文件
![](/icons/60994de.gif)
位置
![](/icons/60994dou2.gif)
对于
![](/icons/60994yi.gif)
次性使用
![](/icons/60994dou.gif)
可以更容易地在
![](/icons/60994yi.gif)
个本地临时目录中构建密匙环
![](/icons/60994dou.gif)
生成并交换证书
![](/icons/60994dou.gif)
然后将完成
![](/icons/60994de.gif)
密匙环文件移动到它们
![](/icons/60994de.gif)
最终目标位置
![](/icons/60994dou2.gif)
但是您不可能在每次需要添加
![](/icons/60994yi.gif)
个证书
![](/icons/60994de.gif)
时候从头开始生成
![](/icons/60994yi.gif)
个新
![](/icons/60994de.gif)
密匙环
![](/icons/60994dou.gif)
除非您拥有
![](/icons/60994yi.gif)
个安全
![](/icons/60994de.gif)
部署服务器和
![](/icons/60994yi.gif)
些真正好
![](/icons/60994de.gif)
自动化
![](/icons/60994dou.gif)
否则维护
![](/icons/60994yi.gif)
个中央密匙环资源库并在执行维护任务的后将这些密匙环推送到您
![](/icons/60994de.gif)
队列管理器是不切实际
![](/icons/60994de.gif)
![](/icons/60994dou2.gif)
要使脚本可重复使用
![](/icons/60994dou.gif)
您
![](/icons/60994de.gif)
脚本需要在密匙环实际使用
![](/icons/60994de.gif)
地方操纵密匙环
![](/icons/60994dou2.gif)
这需要您将几个文件和路径元素嵌入到您
![](/icons/60994de.gif)
公共脚本头部中
![](/icons/60994dou2.gif)
下面就让我们来研究
![](/icons/60994yi.gif)
下这些内容
![](/icons/60994yinwei.gif)
将队列管理器
![](/icons/60994de.gif)
名称包含在证书
![](/icons/60994de.gif)
Common Name 字段中是
![](/icons/60994yi.gif)
个惯例
![](/icons/60994dou.gif)
您需要
![](/icons/60994yi.gif)
个变量来持有它:
QMGRNAME=QMA
要完成证书
![](/icons/60994de.gif)
可分辨名称
![](/icons/60994dou.gif)
通常需要
![](/icons/60994yi.gif)
个域:
DOMAIN=us.ibm.com
您还需要几个组织和地址字段
![](/icons/60994dou2.gif)
我把这些内容组合到
![](/icons/60994yi.gif)
起形成
![](/icons/60994yi.gif)
个变量
![](/icons/60994dou.gif)
称为 ORG:
ORG=O=IBM,OU=ISSW,OU=PROD,OU=ADMIN,L=Charlotte,ST=NC,C=US
证书标签需要队列管理器名称
![](/icons/60994de.gif)
小写版本
![](/icons/60994dou2.gif)
队列管理器将搜寻这个小写版本
![](/icons/60994dou.gif)
以便它能够找到在 SSL 协议期间将显示
![](/icons/60994de.gif)
证书
![](/icons/60994dou2.gif)
FOLDEDNAME=qma
您还需要知道队列管理器在文件系统中
![](/icons/60994de.gif)
位置
![](/icons/60994dou2.gif)
WebSphere MQ 将改变某些
![](/icons/60994zifu.gif)
![](/icons/60994dou.gif)
以便创建平台可移植
![](/icons/60994de.gif)
文件名
![](/icons/60994dou2.gif)
例如
![](/icons/60994dou.gif)
如果
![](/icons/60994yi.gif)
个队列管理器名称包含
![](/icons/60994yi.gif)
个圆点
![](/icons/60994zifu.gif)
![](/icons/60994dou.gif)
则该
![](/icons/60994zifu.gif)
将被转换为
![](/icons/60994yi.gif)
个感叹号
![](/icons/60994dou2.gif)
如果您
![](/icons/60994de.gif)
队列管理器名称包含任何非字母数字
![](/icons/60994de.gif)
![](/icons/60994zifu.gif)
![](/icons/60994dou.gif)
您需要检查文件系统以查找被改变
![](/icons/60994de.gif)
名称并在这里设置该值:
MANGLEDNAME=QMA
脚本应该可用于非标准安装
![](/icons/60994dou.gif)
特别是队列管理器是在
![](/icons/60994yi.gif)
个高可用性硬件集群上实现
![](/icons/60994de.gif)
时候
![](/icons/60994dou2.gif)
PATH2QMGR 变量用于保存这个位置
![](/icons/60994dou2.gif)
PATH2QMGR=/var/mqm/qmgrs
Windows® 系统上
![](/icons/60994de.gif)
同
![](/icons/60994yi.gif)
个变量将拥有这个值(假设
![](/icons/60994yi.gif)
个默认安装):
PATH2QMGR=C:\Program Files\IBM\WebSphere MQ
密匙环
![](/icons/60994de.gif)
密码作为
![](/icons/60994yi.gif)
个用户可编辑
![](/icons/60994de.gif)
环境变量存储在脚本中
![](/icons/60994dou2.gif)
确保不要将存储有密码
![](/icons/60994de.gif)
脚本随意放置
![](/icons/60994dou2.gif)
保存和运行这个脚本
![](/icons/60994de.gif)
好地方是队列管理器
![](/icons/60994de.gif)
SSL 目录
![](/icons/60994dou2.gif)
这个目录必须保护起来
![](/icons/60994dou.gif)
以便只有 mqm(或其他平台上
![](/icons/60994de.gif)
等同物)用户 ID 能够读取这些文件
![](/icons/60994dou2.gif)
由于密匙数据库密码隐藏在这里
![](/icons/60994dou.gif)
将脚本存储在这里也不会暴露
![](/icons/60994dou2.gif)
PASSWORD=qK2EkyBmWU
密码期限只使用
![](/icons/60994yi.gif)
次
![](/icons/60994dou.gif)
但是我喜欢为它创建
![](/icons/60994yi.gif)
个变量
![](/icons/60994dou.gif)
并将变量和其他
![](/icons/60994de.gif)
用户可编辑字段放置在
![](/icons/60994yi.gif)
起
![](/icons/60994dou2.gif)
这向脚本操作员表明
![](/icons/60994dou.gif)
![](/icons/60994yi.gif)
个策略决策是在这里捕获
![](/icons/60994de.gif)
![](/icons/60994dou2.gif)
这个值以天为单位
![](/icons/60994dou.gif)
我为这个举例指定了 10 年
![](/icons/60994de.gif)
期限
![](/icons/60994dou2.gif)
EXPIRY=3650
我们将在这里使用
![](/icons/60994de.gif)
命令是 GSKit C API 命令而不是 Java 实现
![](/icons/60994dou2.gif)
这是
![](/icons/60994yinwei.gif)
C 版本在命令行上显示
![](/icons/60994de.gif)
![](/icons/60994yi.gif)
些选项在 Java 版本中不可用
![](/icons/60994dou2.gif)
使用 C 版本还有另外
![](/icons/60994yi.gif)
个附带
![](/icons/60994de.gif)
好处
![](/icons/60994dou.gif)
C 可执行文件
![](/icons/60994de.gif)
执行速度要比 Java 快得多
![](/icons/60994dou.gif)
![](/icons/60994yinwei.gif)
Java 版本必须为每个命令
![](/icons/60994diaoyong.gif)
构建并拆除
![](/icons/60994yi.gif)
个 JVM
![](/icons/60994dou2.gif)
基于 C 语言
![](/icons/60994de.gif)
整个脚本
![](/icons/60994de.gif)
运行时间和在 Java 版本中执行单个命令
![](/icons/60994de.gif)
时间相当
![](/icons/60994dou2.gif)
要执行文件
![](/icons/60994dou.gif)
脚本只需知道 C 2进制文件
![](/icons/60994de.gif)
路径
![](/icons/60994dou2.gif)
对于 UNIX® 系统
![](/icons/60994dou.gif)
默认
![](/icons/60994de.gif)
位置位于 /opt 中:
PATH=/opt/IBM/gskit/bin:/opt/IBM/gskit/lib:$PATH
在 Windows 系统上
![](/icons/60994dou.gif)
这个默认位置位于 C: 驱动器上:
PATH=C:\Program Files\IBM\gsk7\bin:C:\Program Files\IBM\gsk7\lib:%PATH%
这是最后
![](/icons/60994yi.gif)
个用户可编辑变量
![](/icons/60994dou2.gif)
然而在运行任何命令的前
![](/icons/60994dou.gif)
您必须告知脚本密匙环文件
![](/icons/60994de.gif)
名称
![](/icons/60994dou2.gif)
这个名称通过结合使用默认
![](/icons/60994de.gif)
WebSphere MQ 设置和前面步骤中输入
![](/icons/60994de.gif)
变量构建
![](/icons/60994dou2.gif)
对于 UNIX 和 Windows
![](/icons/60994dou.gif)
这些变量分别是:
MQSSLDB=$PATH2QMGR/$MANGLEDNAME/ssl/key.kdb
MQSSLDB=%PATH2QMGR%\%MANGLEDNAME%\ssl\key.kdb
这些位置是默认
![](/icons/60994de.gif)
![](/icons/60994dou.gif)
应该在队列管理器
![](/icons/60994de.gif)
SSLKEYR 属性中显示
![](/icons/60994dou2.gif)
如果选择了另
![](/icons/60994yi.gif)
个位置
![](/icons/60994dou.gif)
![](/icons/60994yi.gif)
定要相应更新队列管理器
![](/icons/60994dou2.gif)
上面
![](/icons/60994de.gif)
设置可以用于任何证书管理脚本
![](/icons/60994dou2.gif)
尽管
![](/icons/60994yi.gif)
些命令
![](/icons/60994diaoyong.gif)
需要区别
![](/icons/60994de.gif)
或其他参数
![](/icons/60994dou.gif)
但是实现是相同
![](/icons/60994de.gif)
:将用户可编辑
![](/icons/60994de.gif)
变量全部放置到最前面
![](/icons/60994dou.gif)
在那里可以将它们作为
![](/icons/60994yi.gif)
个集合来管理
![](/icons/60994dou2.gif)
创建密匙环并删除默认
![](/icons/60994de.gif)
CA 条目
下
![](/icons/60994yi.gif)
步是生成默认状态
![](/icons/60994de.gif)
密匙环
![](/icons/60994dou.gif)
这需要
![](/icons/60994yi.gif)
个单
![](/icons/60994yi.gif)
gsk7capicmd 命令
![](/icons/60994diaoyong.gif)
:
gsk7capicmd -keydb -create -db "$MQSSLDB" -pw $PASSWORD -type cms -expire $EXPIRY -stash -fips
地点:
第
![](/icons/60994yi.gif)
个 gsk7capicmd 参数是需要执行
![](/icons/60994de.gif)
操作类型
![](/icons/60994dou.gif)
这里是密匙数据库操作
![](/icons/60994dou2.gif)
第 2个参数始终为要在这个操作类型中执行
![](/icons/60994de.gif)
动作
![](/icons/60994dou2.gif)
这里
![](/icons/60994dou.gif)
我们打算创建
![](/icons/60994yi.gif)
个新
![](/icons/60994de.gif)
密匙数据库
![](/icons/60994dou.gif)
该数据库通过完全限定
![](/icons/60994de.gif)
–db 选项指定
![](/icons/60994dou2.gif)
数据库类型指定为 cms
![](/icons/60994dou.gif)
![](/icons/60994yinwei.gif)
队列管理器需要这种类型
![](/icons/60994dou2.gif)
–stash 选项创建
![](/icons/60994yi.gif)
个带有密码
![](/icons/60994de.gif)
隐藏文件
![](/icons/60994dou2.gif)
这是队列管理器在没有人类干预
![](/icons/60994de.gif)
情况下访问密匙数据库
![](/icons/60994de.gif)
方式
![](/icons/60994dou2.gif)
最后指定
![](/icons/60994de.gif)
选项是 –fips
![](/icons/60994dou2.gif)
该选项不仅生成
![](/icons/60994yi.gif)
个和 Federal Information Processing Security (FIPS) 标准兼容
![](/icons/60994de.gif)
密匙数据库
![](/icons/60994dou.gif)
它还确保在运行命令时使用
![](/icons/60994de.gif)
库和算法是 FIPS 兼容
![](/icons/60994de.gif)
![](/icons/60994dou2.gif)
我不知道指定使用和 FIPS 兼容
![](/icons/60994de.gif)
命令有什么负面影响
![](/icons/60994dou.gif)
但是这种命令
![](/icons/60994de.gif)
确有
![](/icons/60994yi.gif)
点好处:它们已经各自经过了认证
![](/icons/60994dou2.gif)
除非可以充分地证明不应在所有情况使用它们
![](/icons/60994dou.gif)
否则我
![](/icons/60994de.gif)
策略就是总是指定 FIPS
![](/icons/60994dou2.gif)
密匙环刚刚创建时
![](/icons/60994dou.gif)
它将使用几个默认
![](/icons/60994de.gif)
CA 签名者证书加载
![](/icons/60994dou2.gif)
目前
![](/icons/60994dou.gif)
这些证书包括来自 Entrust、Verisign、Thawte 和 RSA
![](/icons/60994de.gif)
根证书
![](/icons/60994dou2.gif)
如前所述
![](/icons/60994dou.gif)
这些根证书
![](/icons/60994de.gif)
出现将为 CA 已经发送或将来即将发送
![](/icons/60994de.gif)
每个证书创建
![](/icons/60994yi.gif)
个 Allow-All 策略
![](/icons/60994dou2.gif)
![](/icons/60994yinwei.gif)
我们现在只使用自签名证书
![](/icons/60994dou.gif)
所有这些根证书代表对我们
![](/icons/60994de.gif)
队列管理器
![](/icons/60994de.gif)
不恰当
![](/icons/60994de.gif)
访问授权
![](/icons/60994dou2.gif)
因此
![](/icons/60994dou.gif)
下
![](/icons/60994yi.gif)
步就是删除所有这些默认
![](/icons/60994de.gif)
CA 证书
![](/icons/60994dou2.gif)
证书列表随着时间而改变
![](/icons/60994dou2.gif)
这里使用
![](/icons/60994de.gif)
特定证书来自 V6.0 队列管理器
![](/icons/60994dou2.gif)
根据您
![](/icons/60994de.gif)
版本和补丁包
![](/icons/60994de.gif)
区别
![](/icons/60994dou.gif)
您看到
![](/icons/60994de.gif)
这个列表可能有些区别
![](/icons/60994dou2.gif)
为了确保所有
![](/icons/60994de.gif)
CA 证书已被删除
![](/icons/60994dou.gif)
您需要将
![](/icons/60994yi.gif)
个显示密匙环中
![](/icons/60994de.gif)
所有证书
![](/icons/60994de.gif)
命令添加到脚本末尾
![](/icons/60994dou2.gif)
删除
![](/icons/60994yi.gif)
个证书
![](/icons/60994de.gif)
命令如下所示:
gsk7capicmd -cert -delete -label "Entrust.net Global Secure Server Cert
![](/icons/60994if.gif)
ication Authority" -db "$MQSSLDB" -pw $PASSWORD -fips
–label 选项通过
![](/icons/60994yi.gif)
个人类可读
![](/icons/60994de.gif)
![](/icons/60994zifu.gif)
串识别证书
![](/icons/60994dou2.gif)
这个标签在
![](/icons/60994yi.gif)
个密匙环内必须是惟
![](/icons/60994yi.gif)
![](/icons/60994de.gif)
![](/icons/60994dou.gif)
它在证书创建或导入时设置
![](/icons/60994dou2.gif)
同
![](/icons/60994yi.gif)
个证书在区别
![](/icons/60994de.gif)
密匙环中可能有区别
![](/icons/60994de.gif)
标签
![](/icons/60994dou2.gif)
在这个举例中
![](/icons/60994dou.gif)
这个标签识别将要删除
![](/icons/60994de.gif)
特定证书
![](/icons/60994dou2.gif)
我在这里只列举了
![](/icons/60994yi.gif)
个举例
![](/icons/60994dou2.gif)
这个 完整脚本列表 包含 24 个其他命令
![](/icons/60994dou.gif)
这些命令删除各种供应商
![](/icons/60994de.gif)
根证书和中间证书
![](/icons/60994dou2.gif)
生成本地队列管理器
![](/icons/60994de.gif)
证书
下
![](/icons/60994yi.gif)
步是为本地队列管理器生成新
![](/icons/60994de.gif)
证书
![](/icons/60994dou2.gif)
队列管理器根据标签定位它
![](/icons/60994de.gif)
证书
![](/icons/60994dou.gif)
标签必须总是由固定
![](/icons/60994zifu.gif)
串 ibmwebspheremq 加上队列管理器
![](/icons/60994de.gif)
小写名称组成
![](/icons/60994dou2.gif)
在下面
![](/icons/60994de.gif)
举例中
![](/icons/60994dou.gif)
这个标签
![](/icons/60994de.gif)
组成方式为连接标签
![](/icons/60994de.gif)
固定部分和在脚本头部中设置
![](/icons/60994de.gif)
$FOLDEDNAME 变量:
gsk7capicmd -cert -create -db "$MQSSLDB" -pw $PASSWORD -label "ibmwebspheremq$FOLDEDNAME" -dn "CN=$QMGRNAME.$DOMAIN,$ORG" -fips
这个命令引入了另
![](/icons/60994yi.gif)
个新选项 —— 证书
![](/icons/60994de.gif)
可分辨名称(Distinguished Name)
![](/icons/60994dou.gif)
缩写为 DN
![](/icons/60994dou2.gif)
这个 DN 是
![](/icons/60994yi.gif)
个全局惟
![](/icons/60994yi.gif)
![](/icons/60994de.gif)
名称
![](/icons/60994dou.gif)
代表由证书表示
![](/icons/60994de.gif)
实体
![](/icons/60994dou2.gif)
它包含几个子字段:
CN=公共名称
O=组织
OU=组织单位
L=位置
ST=州
![](/icons/60994dou.gif)
省
C=国家
这里应该注意
![](/icons/60994de.gif)
是
![](/icons/60994dou.gif)
“全局惟
![](/icons/60994yi.gif)
” 是针对每个发布者而言
![](/icons/60994de.gif)
![](/icons/60994dou2.gif)
两个或多个证书机构使用相同
![](/icons/60994de.gif)
DN 元素是完全有效
![](/icons/60994de.gif)
![](/icons/60994dou2.gif)
对于自签名证书这种情况
![](/icons/60994dou.gif)
每个证书都是自己
![](/icons/60994de.gif)
根证书
![](/icons/60994dou.gif)
全局惟
![](/icons/60994yi.gif)
性
![](/icons/60994de.gif)
惟
![](/icons/60994yi.gif)
实施办法就是您围绕用来发布和管理证书
![](/icons/60994de.gif)
人工流程构建
![](/icons/60994de.gif)
Control控件
![](/icons/60994dou2.gif)
队列管理器
![](/icons/60994de.gif)
公共名称通常是队列管理器名称加上其驻留
![](/icons/60994de.gif)
域名
![](/icons/60994dou2.gif)
例如
![](/icons/60994dou.gif)
QMA.us.ibm.com 就是我们
![](/icons/60994de.gif)
QMA 队列管理器
![](/icons/60994de.gif)
![](/icons/60994yi.gif)
个有效 CN
![](/icons/60994dou2.gif)
![](/icons/60994yi.gif)
个证书可能包含多个组织单位(Organization Unit
![](/icons/60994dou.gif)
OU)条目
![](/icons/60994dou2.gif)
仔细选择 OU 命名方式有助于创建有意义
![](/icons/60994de.gif)
SSLPEER 值
![](/icons/60994dou2.gif)
例如
![](/icons/60994dou.gif)
如果
![](/icons/60994yi.gif)
个 OU 条目是 PROD 或 DEV
![](/icons/60994dou.gif)
那么可以创建
![](/icons/60994yi.gif)
个 SSLPEER
![](/icons/60994dou.gif)
阻止在生产和开发队列管理器的间进行相互连接
![](/icons/60994dou2.gif)
(这个通道
![](/icons/60994de.gif)
SSLPEER 属性和可分辨名称已在
![](/icons/60994yi.gif)
月份
![](/icons/60994de.gif)
![](/icons/60994smhl.gif)
任务:消息传递
![](/icons/60994smhr.gif)
在 WebSphere MQ 网络上进行 SSL 规划 中详细讨论过)
![](/icons/60994dou2.gif)
提取新
![](/icons/60994de.gif)
证书
为了使新
![](/icons/60994de.gif)
证书在
![](/icons/60994yi.gif)
个 SSL 协议中有用
![](/icons/60994dou.gif)
远程队列管理器必须访问该证书
![](/icons/60994de.gif)
公共密匙
![](/icons/60994dou2.gif)
为此
![](/icons/60994dou.gif)
需要将这个证书提取到
![](/icons/60994yi.gif)
个文件
![](/icons/60994dou.gif)
将文件复制到远程节点
![](/icons/60994dou.gif)
然后将它导入到驻留在那里
![](/icons/60994de.gif)
密匙环
![](/icons/60994dou2.gif)
提取证书将是当前脚本
![](/icons/60994de.gif)
最后
![](/icons/60994yi.gif)
批任务的
![](/icons/60994yi.gif)
![](/icons/60994dou.gif)
然后您将构建第 2个脚本
![](/icons/60994dou.gif)
以将证书文件导入到远程密匙环中
![](/icons/60994dou2.gif)
提取证书
![](/icons/60994de.gif)
命令是:
gsk7capicmd -cert -extract -db "$MQSSLDB" -pw $PASSWORD -label "ibmwebspheremq$FOLDEDNAME" -target $PATH2QMGR/$MANGLEDNAME/ssl/$FOLDEDNAME.crt -format ascii -fips
这里
![](/icons/60994dou.gif)
您对密匙环、证书标签和密码重用了的前
![](/icons/60994de.gif)
值
![](/icons/60994dou2.gif)
–target 选项识别包含提取
![](/icons/60994de.gif)
证书
![](/icons/60994de.gif)
文件
![](/icons/60994de.gif)
名称和位置
![](/icons/60994dou2.gif)
文件名中
![](/icons/60994de.gif)
.crt 扩展名匹配 –format ascii 选项
![](/icons/60994dou.gif)
并将使您能够稍后导入证书
![](/icons/60994dou2.gif)
整理
到此
![](/icons/60994dou.gif)
脚本工作结束
![](/icons/60994dou.gif)
操作员需要验证结果
![](/icons/60994dou2.gif)
您需要显示密匙环中
![](/icons/60994de.gif)
证书并要求操作员确定没有默认
![](/icons/60994de.gif)
CA 证书保留下来
![](/icons/60994dou2.gif)
这个步骤
![](/icons/60994de.gif)
目
![](/icons/60994de.gif)
是为了捕获区别
![](/icons/60994de.gif)
GSKit 发行版的间
![](/icons/60994de.gif)
更改
![](/icons/60994dou.gif)
GSKit 将更新默认证书
![](/icons/60994de.gif)
清单
![](/icons/60994dou2.gif)
gsk7capicmd -cert -list -db "$MQSSLDB" -pw $PASSWORD -fips
第 2个脚本:将证书添加到密匙环
最后
![](/icons/60994yi.gif)
步是在 QMA 和 QMB 的间交换证书
![](/icons/60994dou2.gif)
您将构建第 2个脚本
![](/icons/60994dou.gif)
该脚本将读取先前创建
![](/icons/60994de.gif)
那个 .crt 文件并将它添加到
![](/icons/60994yi.gif)
个队列管理器
![](/icons/60994de.gif)
密匙环
![](/icons/60994dou2.gif)
这个脚本
![](/icons/60994de.gif)
前面部分将重用您的前使用
![](/icons/60994de.gif)
多个变量
![](/icons/60994dou2.gif)
惟
![](/icons/60994yi.gif)
![](/icons/60994de.gif)
区别是 $FOLDEDNAME 变量现在引用远程队列管理器而不是本地队列管理器
![](/icons/60994dou2.gif)
将证书添加到密匙环
![](/icons/60994de.gif)
命令是:
gsk7capicmd -cert -add -db "$MQSSLDB" -pw $PASSWORD -label "ibmwebspheremq$FOLDEDNAME" -file $FOLDEDNAME.crt -format ascii –fips
注意
![](/icons/60994dou.gif)
这个脚本期望文件名匹配队列管理器
![](/icons/60994de.gif)
小写名称且文件位于当前目录中
![](/icons/60994dou2.gif)
它还使用相同
![](/icons/60994de.gif)
标准证书标签
![](/icons/60994dou.gif)
尽管这不是必须
![](/icons/60994de.gif)
![](/icons/60994dou2.gif)
WebSphere MQ 只在需要队列管理器定位自己
![](/icons/60994de.gif)
证书时要求标签使用特定
![](/icons/60994de.gif)
格式
![](/icons/60994dou2.gif)
我选择使用相同
![](/icons/60994de.gif)
标签表示所有密匙环中
![](/icons/60994de.gif)
特定证书
![](/icons/60994dou.gif)
![](/icons/60994yinwei.gif)
![](/icons/60994yi.gif)
致性有助于管理员更容易地识别和管理证书
![](/icons/60994dou2.gif)
和第
![](/icons/60994yi.gif)
个脚本
![](/icons/60994yi.gif)
样
![](/icons/60994dou.gif)
密匙环
![](/icons/60994de.gif)
内容被显示出来以确认操作已经成功完成
![](/icons/60994dou2.gif)
结束语
本文提供
![](/icons/60994de.gif)
脚本 是连接两个队列管理器所需
![](/icons/60994de.gif)
最少脚本举例
![](/icons/60994dou2.gif)
设计思想如下:第
![](/icons/60994yi.gif)
个脚本可以在任何队列管理器上重用以初次创建密匙环
![](/icons/60994dou2.gif)
第 2个脚本可以重复用于从任何远程 MQ 节点添加证书
![](/icons/60994dou2.gif)
这两个脚本中
![](/icons/60994de.gif)
命令足够用于连接
![](/icons/60994yi.gif)
个任意大小
![](/icons/60994de.gif)
网络
![](/icons/60994dou2.gif)
当然
![](/icons/60994dou.gif)
通过替换脚本中
![](/icons/60994de.gif)
适当命令
![](/icons/60994dou.gif)
可以从这些举例轻松构建其他脚本
![](/icons/60994dou2.gif)
在您尝试创建自己
![](/icons/60994de.gif)
脚本时
![](/icons/60994dou.gif)
建议您包含
![](/icons/60994yi.gif)
个删除证书
![](/icons/60994de.gif)
脚本
![](/icons/60994dou.gif)
![](/icons/60994yi.gif)
个列出密匙环内容
![](/icons/60994de.gif)
独立脚本
![](/icons/60994dou.gif)
以及
![](/icons/60994yi.gif)
个打印任意证书细节
![](/icons/60994de.gif)
脚本
![](/icons/60994dou2.gif)
最后
![](/icons/60994dou.gif)
您可能需要
![](/icons/60994yi.gif)
个脚本来更改密匙数据库
![](/icons/60994de.gif)
密码
![](/icons/60994dou.gif)
具体情况取决于您
![](/icons/60994de.gif)
公司
![](/icons/60994de.gif)
密码有效期限
![](/icons/60994dou2.gif)
所有这些脚本都可以通过对现有
![](/icons/60994de.gif)
某个脚本进行少许修改而创建
![](/icons/60994dou2.gif)
我使用
![](/icons/60994de.gif)
脚本故意保持了简单性
![](/icons/60994dou2.gif)
只需少许工作
![](/icons/60994dou.gif)
脚本中
![](/icons/60994de.gif)
许多字段都可以从队列管理器
![](/icons/60994de.gif)
ini 文件和 Windows
![](/icons/60994de.gif)
注册表中获取和解析
![](/icons/60994dou2.gif)
但作为
![](/icons/60994yi.gif)
名顾问
![](/icons/60994dou.gif)
我需要能够在尽可能广泛
![](/icons/60994de.gif)
环境中使用
![](/icons/60994de.gif)
工具
![](/icons/60994dou.gif)
这些工具不能够进行太多
![](/icons/60994de.gif)
假设
![](/icons/60994dou2.gif)
如果您拥有
![](/icons/60994yi.gif)
个固定
![](/icons/60994de.gif)
职位
![](/icons/60994dou.gif)
您可能想花点时间使您
![](/icons/60994de.gif)
脚本更易用、更健壮
![](/icons/60994dou2.gif)
您可以考虑添加
![](/icons/60994yi.gif)
些改进措施
![](/icons/60994dou.gif)
比如包含
![](/icons/60994yi.gif)
些逻辑以解析文件系统中
![](/icons/60994de.gif)
队列管理器
![](/icons/60994de.gif)
位置等信息
![](/icons/60994dou.gif)
或者实现更好
![](/icons/60994de.gif)
![](/icons/60994cuowu.gif)
处理能力
![](/icons/60994dou2.gif)
用户输入
![](/icons/60994de.gif)
内容越少
![](/icons/60994dou.gif)
导致人工
![](/icons/60994cuowu.gif)
![](/icons/60994de.gif)
可能性就越低
![](/icons/60994dou2.gif)
诊断性能越好
![](/icons/60994dou.gif)
操作员错过
![](/icons/60994yi.gif)
条
![](/icons/60994cuowu.gif)
信息并继续使用
![](/icons/60994yi.gif)
个
![](/icons/60994cuowu.gif)
![](/icons/60994de.gif)
密匙环
![](/icons/60994de.gif)
机会就越少
![](/icons/60994dou2.gif)
我将乐于在 t-rob.net 上讨论您遇到
![](/icons/60994de.gif)
任何问题
![](/icons/60994dou.gif)
如果您愿意和我分享
![](/icons/60994de.gif)
话
![](/icons/60994dou2.gif)
但是
![](/icons/60994dou.gif)
无论您使用简单
![](/icons/60994de.gif)
脚本还是增强
![](/icons/60994de.gif)
脚本
![](/icons/60994dou.gif)
自动化都将帮助您快速、轻松和
![](/icons/60994yi.gif)
致地实现 SSL
![](/icons/60994dou2.gif)
本文举例源代码或素材下载