技术标签: ice 3.6 java
Ice
尊重作者研究,转载请注明出处。
========
创建时间
2015-12-28
创建人
邓燎燕
版本号
1.0
修改时间
修改人
修改内容
2017-03-09
邓燎燕
添加keystore-explorer地址
2016-01-18
邓燎燕
修复IceApp脚本bug,修改了Ice分布式服务配置说明,添加了IceGrid和IcePatch2的集成,也可以参考http://blog.csdn.net/pj81102/article/details/5910545
2016-01-11
邓燎燕
添加bcprov-jdk15on-153,修改了安装脚本
2016-01-11
邓燎燕
添加Ice分布式服务配置说明
2016-01-06
邓燎燕
添加文件和安装脚本
说明
本文的所有研究是基于Ice 3.6.1
iOS端的开发依赖包icetouch
在Ice 3.6.1里不再有iceca这个证书生成工具,已经迁移到icecertutils,另发现一个比较好用的证书工具keystore-explorer
服务器:CentOS 6.5 64位
Ice 编译依赖 iceFiles
JavaScript 客户端 js/IceClient
========
编译安装
c++的编译安装请参考ice/cpp/BuildInstructionsLinux.md
依赖的第三方库有expat 2.0、OpenSSL 0.9.8 or later、bzip 1.0、Berkeley DB 5.3、mcpp 2.7.2 (with patches),建议能收到编译安装的就收到编译安装,尽量不要使用yum这类工具,免得有奇葩的错误。这个我在CentOS和Mac OS X都安装了。
Java的编译安装请参考ice/java/BuildInstructions.md
在CentOS上安装,我是没有成功过,但是在Mac OS X上成功了,所有我就直接将Mac OS X上编译好的jar包都上传到CentOS上了。
Objective-C的编译安装请参考ice/objective-c/BuildInstructions.md
JS库
Ice的js库可以到该连接下载http://cdnjs.com/libraries/ice
========
案例
IceGrid+IceBox+Spring
我参考了《ZeroC Ice权威指南》中的第6章在线订票系统写了例子。
IceGrid+Glacier2使用SSL和WSS通讯
我参考了ice-demo编写了客户端的代码。但是在使用SSL和WSS通讯时要生成相关证书,证书的生成请参考mymakecert.sh。
结构图
请求说明
客户端(Android和iOS)通过SSL和WSS向Glacier2发送请求,Glacier2在通过TCP向IceGrid获取相关结果后返回给客户端。
到目前为止,经测试纯Java客户端、Android、iOS使用加密或非加密都成功,而提供的网页前端使用WS成功,使用WSS没能成功,希望有人能完善或提供网页前端使用WSS的说明。
部署
路径/home/Ice
创建Ice_gridregistry、Ice_gridnode、registry、node、node/data、Ice_glacier2、grid、logs、Ice_glacier2/sslstore
将生成的证书放在Ice_glacier2/sslstore下
将IceGrid配置写入Ice_gridregistry/icegridregistry.cfg
将IceNode配置写入Ice_gridnode/icegridnode1.cfg
将Glacier2配置写入Ice_glacier2/iceglacier2.cfg
将iceTicketProject应用的服务端放在/home/Ice下
运行IceApp.sh脚本
在运行IceAdmin.sh加载应用的ticketgrid.xml配置文件,启动服务
========
附件
mymakecert.sh
#!/bin/bash
#
# 作者:邓燎燕
# 2015-12-25
#
# 要配置好iceca的ICE_CA_HOME环境变量
# 我的ca、server和client密码都是123456
echo "------------ iceca init --------------"
iceca init
echo "------------ iceca create server and client --------------"
iceca create --ip=192.168.0.112 --dns=192.168.0.112 server
iceca create client
echo "------------ iceca export cert --------------"
iceca export --password 123456 --alias ca ./ca/ca.cer
iceca export --password 123456 --alias client ./ca/client.cer
iceca export --password 123456 --alias server ./ca/server.cer
echo "------------ iceca export jks --------------"
iceca export --password 123456 --alias ca ./ca/ca.jks
iceca export --password 123456 --alias client ./ca/client.jks
iceca export --password 123456 --alias server ./ca/server.jks
echo "------------ iceca export bks --------------"
iceca export --password 123456 --alias ca ./ca/ca.bks
iceca export --password 123456 --alias client ./ca/client.bks
iceca export --password 123456 --alias server ./ca/server.bks
echo "------------ iceca export p12 --------------"
iceca export --password 123456 --alias ca ./ca/ca.p12
iceca export --password 123456 --alias client ./ca/client.p12
iceca export --password 123456 --alias server ./ca/server.p12
echo "------------ keytool -import --------------"
keytool -import -v -trustcacerts -alias ca -file ./ca/ca.cer -storepass 123456 -keystore ./ca/server.jks
keytool -import -v -trustcacerts -alias ca -file ./ca/ca.cer -storepass 123456 -keystore ./ca/client.jks
keytool -import -v -trustcacerts -alias ca -file ./ca/ca.cer -storepass 123456 -keystore ./ca/server.bks -storetype bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /path/bcprov-jdk15on-153.jar
keytool -import -v -trustcacerts -alias ca -file ./ca/ca.cer -storepass 123456 -keystore ./ca/client.bks -storetype bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /path/bcprov-jdk15on-153.jar
echo "--------------------------"
keytool -list -keystore ./ca/ca.p12 -storetype pkcs12 -v -storepass 123456
echo "--------------------------"
keytool -list -keystore ./ca/ca.jks -storepass 123456 -v
echo "--------------------------"
keytool -list -keystore ./ca/ca.bks -storetype bks -storepass 123456 -v -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /path/bcprov-jdk15on-153.jar
echo "--------------------------"
keytool -list -keystore ./ca/server.p12 -storetype pkcs12 -v -storepass 123456
echo "--------------------------"
keytool -list -keystore ./ca/server.jks -storepass 123456 -v
echo "--------------------------"
keytool -list -keystore ./ca/server.bks -storetype bks -storepass 123456 -v -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /path/bcprov-jdk15on-153.jar
echo "--------------------------"
keytool -list -keystore ./ca/client.p12 -storetype pkcs12 -v -storepass 123456
echo "--------------------------"
keytool -list -keystore ./ca/client.jks -storepass 123456 -v
echo "--------------------------"
keytool -list -keystore ./ca/client.bks -storepass 123456 -v -storetype bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath /path/bcprov-jdk15on-153.jar
echo ""
echo ""
echo "--------------------------"
echo "配置说明"
echo "Glacier2的配置IceSSL.CAs=ca.pem,IceSSL.CertFile=server.p12"
echo "纯Java客户端使用client.jks"
echo "Android客户端使用client.bks"
echo "iOS客户端使用ca.cer和client.p12,配置IceSSL.CAs=ca.cer,IceSSL.CertFile=client.p12"
echo ""
Glacier2配置
#
# Set the instance name
#
Glacier2.InstanceName=DemoGlacier2
#
# The client-visible endpoint of Glacier2. This should be an endpoint
# visible from the public Internet, and it should be secure.
#
Glacier2.Client.Endpoints=wss -p 4064:ssl -p 4063
# IceGrid+Glacier2的关键
Ice.Default.Locator=IceGrid/Locator:tcp -h localhost -p 4061
Glacier2.Server.Endpoints=tcp -h localhost
Glacier2.PermissionsVerifier=DemoGlacier2/NullPermissionsVerifier
Glacier2.SessionTimeout=30
Glacier2.Client.ForwardContext=1
Glacier2.Server.ForwardContext=1
Glacier2.Client.SleepTime=500
Glacier2.Server.SleepTime=500
Glacier2.Client.Trace.Request=1
Glacier2.Server.Trace.Request=1
Glacier2.Client.Trace.Override=1
Glacier2.Server.Trace.Override=1
Glacier2.Client.Trace.Reject=1
Glacier2.Trace.Session=1
Glacier2.Trace.RoutingTable=1
Ice.Warn.Connections=1
Ice.Trace.Network=1
Ice.Trace.Protocol=1
IceSSL.Trace.Security=1
#
# SSL Configuration
#
Ice.Plugin.IceSSL=IceSSL:createIceSSL
IceSSL.Protocols=SSL3, TLS1_0, TLS1_1, TLS1_2
IceSSL.DefaultDir=/home/Ice/Ice_glacier2/sslstore
IceSSL.CAs=ca.pem
IceSSL.CertFile=server.p12
IceSSL.Password=123456
IceSSL.Keychain=glacier2.keychain
IceSSL.KeychainPassword=123456
IceGrid配置
IceGrid.Registry.Client.Endpoints=tcp -p 4061:ws -p 4062
IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcp
IceGrid.Registry.AdminPermissionsVerifier=IceGrid/NullPermissionsVerifier
IceGrid.Registry.Data=./registry
IceGrid.Registry.DynamicRegistration=1
Ice.Admin.InstanceName=AdminInstance
Ice.Admin.ServerId=Admin
IceNode配置
#ice node config for ticketnode1
#指定主注册节点的位置
Ice.Default.Locator=IceGrid/Locator:tcp -h 127.0.0.1 -p 4061:ws -h 127.0.0.1 -p 4062
#设置节点1相关数据的存储目录
IceGrid.Node.Data=/home/Ice/node/data
#指定节点1用于监听客户端连接的端口
IceGrid.Node.Endpoints=tcp -p 5062
#指定节点1的名称
IceGrid.Node.Name=node1
#指定错误日志文件
Ice.StdErr=/home/Ice/node/node.stderr.log
Ice.StdOut=/home/Ice/node/node.stdout.log
应用的服务端配置
-Xmx512M
-DAppHome=/home/Ice
-DAppId=TicketOrderServer${id}
com.zzwtec.iceTicketProject.ice.Sl4jIceBoxServer
CLASSPATH=.:/opt/Ice-3.6.1/lib/*:/home/libs/*:/home/Ice/iceTicketProject
纯Java客户端配置
Ice.Default.Router=DemoGlacier2/router:ssl -p 4063 -h 192.168.0.112 -t 10000:wss -p 4064 -h 192.168.0.112 -t 10000
Ice.RetryIntervals=-1
Ice.Trace.Network=0
Ice.Plugin.IceSSL=IceSSL.PluginFactory
IceSSL.DefaultDir=/certs/path
IceSSL.VerifyPeer=0
IceSSL.Trace.Security=1
IceSSL.KeystoreType=JKS
IceSSL.Keystore=client.jks
IceSSL.Password=123456
Android客户端配置
Ice.Default.Router=DemoGlacier2/router:ssl -p 4063 -h 192.168.0.112 -t 10000:wss -p 4064 -h 192.168.0.112 -t 10000
Ice.RetryIntervals=-1
Ice.Trace.Network=0
Ice.Plugin.IceSSL=IceSSL.PluginFactory
Ice.InitPlugins=0
IceSSL.VerifyPeer=0
IceSSL.Trace.Security=1
IceSSL.KeystoreType=BKS
IceSSL.Password=123456
IceSSL.UsePlatformCAs=0
iOS客户端配置
Ice.Default.Router=DemoGlacier2/router:ssl -p 4063 -h 192.168.0.112 -t 10000:wss -p 4064 -h 192.168.0.112 -t 10000
Ice.Trace.Locator=1
Ice.ACM.Client.Timeout=0
Ice.RetryIntervals=-1
Ice.Plugin.IceSSL=IceSSL:createIceSSL
IceSSL.DefaultDir=./
IceSSL.CAs=ca.cer
IceSSL.CertFile=client.p12
IceSSL.Password=123456
#IceSSL.Keychain=client.keychain
#IceSSL.KeychainPassword=123456
文章浏览阅读3.3k次。表示常量类型的方法,就是放后面的;定义变量放前面。 “u”表示“unsigned”,无符号 “l”表示“long”,长整型 如果不加UL的话那就是默认的int型,UL后缀.也是一种强制转换方式.“SysTick_LOAD_RELOAD_Pos”代表“0” “SysTick_LOAD_RELOAD_Msk”代表“(0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)”_0xfffffful
文章浏览阅读77次。php正则 字符怎么替换2021-02-07 12:35:39php正则字符的替换方法:首先创建一个PHP示例文件;然后定义一个字符串;接着通过正则表达式“'/(\w+) (\d+), (\d+)/i'”将指定字符串进行替换即可。本文操作环境:windows7系统、PHP7.1版,DELL G3电脑。preg_replace 函数执行一个正则表达式的搜索和替换。语法mixed preg_repla..._php 判断开头的字符并替换
文章浏览阅读2.3k次。PyQT 跟我学做密码管理器(5) —— 备份数据到邮箱声明:本文借鉴https://blog.csdn.net/bigbennyguo/article/details/50755207 修改而来前言借鉴的文章是基于python2+pyqt4,本文是基于python3+pyqt5环境编辑器:Sublime Text3操作系统:win10Python3所需要的库:主要..._pyqt-tool 密码
文章浏览阅读1k次。浅谈Kaggle 当前算法趋势一年前我还在悉尼大学着实花费不少在房价预测的kaggle竞赛上,然而之后的一年,先是去聚宽做量化研究实习,接着在悉尼大学的最后一个学期我又抽风非要把商学院的物流方向读下来。于是好多次在kaggle上看到喜欢的竞赛头脑一热报了名,然后就没有然后了:(。近来回国找工作,同时考驾照(一直没考),终于有时间再看看kaggle。准备着手把喜欢的竞赛项目做一做,学一学;同时把..._kaggle 什么模型流行
文章浏览阅读1.2k次,点赞2次,收藏9次。目录前言一、数据结构二、Wxml代码三、关键JS代码(一)从数据库中获取数据(二)bindchange事件(三)bindcolumnchange事件(四)处理宿舍数据A.获取宿舍楼栋数据B.获取房号数据(数组与宿舍楼栋数组相对应)C.获取床位数据(数组与宿舍楼栋数组、房号数组相对应)四、整合(一)JS代码(二)Wxml..._三级联动选择器 bed
文章浏览阅读512次。安装linux系统下的mysql1.查看是否安装了mysql;rpm -qa |grep mysql #如果没有输出任何东西,证明没有安装2.找到liunx的版本,下载对应版本的mysql。cat /ect/redhat - release3.下载适合版本的文件来源。#获取我们的文件,通过在linux系统里输入命令和地址wget https://dev.mysql.com/get/mysql75-community-release-el8-1.noarch.rpm#通过找到mysql的官_warning: file /usr/lib64/mysql/plugin/mysql_clear_password.so: remove failed
文章浏览阅读100次。1.我想实现的功能是在java程序中导入HttpURLConnection类,然后将函数的值作为post方法要提交的参数,最后显示在显示台上。2.要用到的函数是自己写的可以显示实时计算机cpu、内存、硬盘利用率的一个方法,返回值是String.3.这是调用HttpURLConnection的代码> package com.httpclient;import java.io.BufferedR..._java返回结果了可以作为参数吗
文章浏览阅读1.2k次。本文目的:加深理解—to JNI and clojure。JNI概述JNI,是Java Native Interface的缩写,中文为Java本地调用。 JavaTM Native Interface (JNI) is a standard programming interface for writing Java native methods and embedding the JavaTM_glpk c++
文章浏览阅读1.8k次。Scala中Map的常用方法_scala中map的用法
文章浏览阅读6.4k次,点赞19次,收藏85次。可能大家对发送字符串,整数,数组等待的没有问题,也想的明白,可是对于浮点型的数,或许有些不知所措(大佬绕过,小白我是这样)今天搞懂了,就记录下!其实发送原理还是通过字符串的形式发送出去的。只不过是我们将浮点型的数进行的拆解。ps:除运算与或运算不太懂的可以自己查查就可以了。假如一个浮点型的数 d = 25.6345879999我想将这个浮点型的数保留2位小数发送到串口,那我该怎么做呢?..._串口发浮点数
文章浏览阅读573次。RSA非对称加密通信非对称加密是非常安全的一类加密算法TXQQ客户Duan的通信也用了椭圆曲线非对称加密(ECC)非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以..._易语言rsa算法
文章浏览阅读879次。1. 引言今天考试遇到一个提交答案题,已经给出了答案检验器(已经编译了的,没有源码),但是手动输命令检验答案文件效率很低,我们最好是让检验器本来输出到屏幕的东西输出到文件,方便我们写程序自动检验。但是我们没有检验器源码,没法 freopen 怎么办呢 QvQ其实是 kb 提出了这个问题啦,下面我就来讲一下 linux(ubuntu)下的重定向输入/输出的方法。2. 输出重定向现在我们有个已经编译好..._重定向输出文件时怎么输出到文件的某一行