==========【IceSSL使用的证书生成方法.txt】======================
————使用iceca脚本生成CA———-
在执行脚本前先设置环境变量
export ICE_CA_HOME=/home/mayjie/certs #指向证书存放目录
export PYTHONUNBUFFERED=1 #设置python的标准输出为无缓冲
然后cd /home/mayjie/certs目录
1、初始化新的root CA
iceca init [–no-password] [–overwrite]
执行成功,会生成两个主要文件ca_cert.pem(CA证书) 和 req.cnf
注意:CA subject name在自定义设置时country name的长度不能超过2位,否则会失败。
2、生成新的证书请求
iceca request [–overwrite] [–no-password] file common-name #file为自定义前缀,common-name也为自定义
举例: iceca request node “IceGrid Node”
执行成功,会生成两个文件file_key.pem(密钥文件) 和 file_req.pem
3、签署证书请求
iceca sign –in req –out cert [–ip ip –dns dns] #req为上一步生成的file_req.pem,cert为自定义文件名
举例:iceca sign –in node_req.pem –out node_cert.pem
执行成功,生成名字为cert的文件(node的证书)
4、转换证书(Java和.NET专用)
iceca import [–overwrite] [–key-pass password] [–store-pass password]
[–java alias cert key keystore] [–cs cert key out-file]
举例:
iceca import –java mycert node_cert.pem node_key.pem cert.jks #生成cert.jks文件,用于java
iceca import –cs node_cert.pem node_key.pem cert.pfx #生成cert.pfx文件,用于.NET
——————————–
全部完成后,可将*_req.pem文件删除
另外,上述过程可以写成一个python脚本。
==================================================
==================================================
==========【IceSSL的使用.txt】======================
【IceGrid基础上加入IceSSL安全通信功能】
1、SSL证书
IceSSL使用底层的OpenSSL完成SSL会话握手,通信双方需提供证书。在ICE中使用iceca脚本生成证书颁发机构(CA)和各种证书文件。
使用iceca详见说明【IceSSL使用的证书生成方法.txt】
2、需要证书的通信方
可以为注册服务器icegridregistry、节点icegridnode、应用服务程序server、客户端client配置证书。
出于安全考虑,还可以为注册服务器、节点的证书以及根CA证书增设密码。
所有节点可以共用同一个证书,也可以有各自的证书。注册服务器等也如此。
3、需要ssl会话的通信
应用服务程序与注册服务器最好使用ssl连接。
主从注册服务器之间、注册服务器与节点之间最好使用ssl连接。
而客户端与注册服务器使用tcp连接即可(客户端只使用了注册服务器的定位间接代理功能情况下)。
4、配置文件通用调整
以下内容为需要SSL会话的通信方需要配置的基本属性,具体值需要调整:
Ice.Plugin.IceSSL=IceSSL:createIceSSL #创建IceSSL
IceSSL.DefaultDir=/opt/certs #指定证书和密钥所在目录,需调整
IceSSL.CertFile=registry_cert.pem #证书,需调整
IceSSL.KeyFile=registry_key.pem #密钥,需调整
IceSSL.CertAuthFile=ca_cert.pem #可信任的CA证书,一般不需调整
IceSSL.Password=password #密钥文件的密码,有则设置,无则删除
5、配置文件特殊调整
【注册服务器配置文件】
各个端点配置为ssl端点,如下:
IceGrid.Registry.Client.Endpoints=ssl -p 12345:tcp -p 12346 #保留tcp端点,允许客户端用tcp连接注册服务器
IceGrid.Registry.Server.Endpoints=ssl
IceGrid.Registry.Internal.Endpoints=ssl
如果允许管理客户端icegridadmin在不用证书情况下依然可以进行ssl连接到注册服务器,则需设置如下属性:
IceSSL.VerifyPeer=1
另外,如果有从注册服务器,从注册服务器的配置文件中属性Ice.Default.Locator应调整为使用ssl端点。
Ice.Default.Locator=DemoIceGrid/Locator:ssl -h 192.168.0.239 -p 12345:ssl -h 192.168.0.25 -p 12345
【节点配置文件】
节点端点调整为ssl,如下
IceGrid.Node.Endpoints=ssl
指向注册服务器的代理调整为使用ssl,如下
Ice.Default.Locator=DemoIceGrid/Locator:ssl -h 192.168.0.239 -p 12345:ssl -h 192.168.0.25 -p 12345
【应用服务程序配置文件】
应用服务程序的配置文件在使用IceGrid情况下为*.xml文件,但属性配置大同小异。加入如:
<properties id=”Secure-Ice.Admin”>
<property name=”Ice.Plugin.IceSSL” value=”IceSSL:createIceSSL”/>
<property name=”IceSSL.CertAuthFile” value=”ca_cert.pem”/>
<property name=”IceSSL.CertFile” value=”server_cert.pem”/>
<property name=”IceSSL.KeyFile” value=”server_key.pem”/>
<property name=”IceSSL.DefaultDir” value=”certs”/>
</properties>
另外,如需要客户端与服务程序使用ssl通信,调整xml中适配器的端点为ssl即可,如
<adapter name=”Hello” endpoints=”ssl” replica-group=”ReplicatedHelloAdapter”/>
【客户端配置文件】
如果客户端与应用服务程序使用ssl通信,则需要为客户端生成证书,并在配置文件中加入之前说明的基本属性即可。
特别说明,其中的Ice.Default.Locator属性依然使用注册服务器的tcp端点即可。
【管理客户端icegridadmin的配置文件】
使用管理客户端部署应用服务程序时,如果使用ssl连接,但不提供证书,做如下调整:
Ice.Default.Locator=DemoIceGrid/Locator:ssl -h 192.168.0.239 -p 12345:ssl -h 192.168.0.25 -p 12345
#
# SSL Configuration
#
IceSSL.DefaultDir=certs
# C++ configuration
Ice.Plugin.IceSSL=IceSSL:createIceSSL
IceSSL.CertAuthFile=ca_cert.pem
6、其他说明
至此,配置完成。以下为额外的属性说明。
(1)SSL缺省为RSA加密,如要使用其他加密算法:
IceSSL.Ciphers=DEFAULT:DSS #DSA加密
(2)IceSSL.TrustOnly系列属性,是在底层SSL验证通过后,IceSSL加入的更上一层验证,相当于信任/拒绝列表
IceSSL.TrustOnly #发出或接收连接请求时,信任/拒绝的对端
IceSSL.TrustOnly.Client #发出连接请求时,可信任或拒绝的对端
IceSSL.TrustOnly.Server #接收连接请求时,可信任或拒绝的对端
IceSSL.TrustOnly.Server.AdapterName #指定适配器在接收连接请求时,可信任或拒绝的对端
(3)IceSSL.Trace.Security=1 #开启SSL安全连接跟踪功能