ice 3.6 java_GitHub - wei804378140/Ice-demo: 基于 Zeroc Ice 3.6.1 的Android、iOS、Java、Javascript例子,Ice 源...-程序员宅基地

技术标签: 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。

结构图

39f86d07d23781b9fe7d71c70e1e7537.png

请求说明

客户端(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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_27964579/article/details/114175971

智能推荐

stm32 里的0xFFFFFFul-程序员宅基地

文章浏览阅读3.3k次。表示常量类型的方法,就是放后面的;定义变量放前面。 “u”表示“unsigned”,无符号 “l”表示“long”,长整型 如果不加UL的话那就是默认的int型,UL后缀.也是一种强制转换方式.“SysTick_LOAD_RELOAD_Pos”代表“0” “SysTick_LOAD_RELOAD_Msk”代表“(0xFFFFFFul << SysTick_LOAD_RELOAD_Pos)”_0xfffffful

php正则替换首字符,php正则 字符怎么替换-程序员宅基地

文章浏览阅读77次。php正则 字符怎么替换2021-02-07 12:35:39php正则字符的替换方法:首先创建一个PHP示例文件;然后定义一个字符串;接着通过正则表达式“'/(\w+) (\d+), (\d+)/i'”将指定字符串进行替换即可。本文操作环境:windows7系统、PHP7.1版,DELL G3电脑。preg_replace 函数执行一个正则表达式的搜索和替换。语法mixed preg_repla..._php 判断开头的字符并替换

PyQT 跟我学做密码管理器(5)_pyqt-tool 密码-程序员宅基地

文章浏览阅读2.3k次。PyQT 跟我学做密码管理器(5) —— 备份数据到邮箱声明:本文借鉴https://blog.csdn.net/bigbennyguo/article/details/50755207 修改而来前言借鉴的文章是基于python2+pyqt4,本文是基于python3+pyqt5环境编辑器:Sublime Text3操作系统:win10Python3所需要的库:主要..._pyqt-tool 密码

浅谈Kaggle 当前算法趋势_kaggle 什么模型流行-程序员宅基地

文章浏览阅读1k次。浅谈Kaggle 当前算法趋势一年前我还在悉尼大学着实花费不少在房价预测的kaggle竞赛上,然而之后的一年,先是去聚宽做量化研究实习,接着在悉尼大学的最后一个学期我又抽风非要把商学院的物流方向读下来。于是好多次在kaggle上看到喜欢的竞赛头脑一热报了名,然后就没有然后了:(。近来回国找工作,同时考驾照(一直没考),终于有时间再看看kaggle。准备着手把喜欢的竞赛项目做一做,学一学;同时把..._kaggle 什么模型流行

【微信小程序】云开发+三级联动选择器_三级联动选择器 bed-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏9次。目录前言一、数据结构二、Wxml代码三、关键JS代码(一)从数据库中获取数据(二)bindchange事件(三)bindcolumnchange事件(四)处理宿舍数据A.获取宿舍楼栋数据B.获取房号数据(数组与宿舍楼栋数组相对应)C.获取床位数据(数组与宿舍楼栋数组、房号数组相对应)四、整合(一)JS代码(二)Wxml..._三级联动选择器 bed

在linux上安装mysql,最全的安装过程_warning: file /usr/lib64/mysql/plugin/mysql_clear_-程序员宅基地

文章浏览阅读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

随便推点

java中可以把代码做为返回值 参数吗_java中如何用函数返回值作为post提交的参数?...-程序员宅基地

文章浏览阅读100次。1.我想实现的功能是在java程序中导入HttpURLConnection类,然后将函数的值作为post方法要提交的参数,最后显示在显示台上。2.要用到的函数是自己写的可以显示实时计算机cpu、内存、硬盘利用率的一个方法,返回值是String.3.这是调用HttpURLConnection的代码> package com.httpclient;import java.io.BufferedR..._java返回结果了可以作为参数吗

JNI技术---clojure 调用C++库的方法_glpk c++-程序员宅基地

文章浏览阅读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++

Scala中的Map操作_scala中map的用法-程序员宅基地

文章浏览阅读1.8k次。Scala中Map的常用方法_scala中map的用法

将一个浮点型的数通过串口发送出去_串口发浮点数-程序员宅基地

文章浏览阅读6.4k次,点赞19次,收藏85次。可能大家对发送字符串,整数,数组等待的没有问题,也想的明白,可是对于浮点型的数,或许有些不知所措(大佬绕过,小白我是这样)今天搞懂了,就记录下!其实发送原理还是通过字符串的形式发送出去的。只不过是我们将浮点型的数进行的拆解。ps:除运算与或运算不太懂的可以自己查查就可以了。假如一个浮点型的数 d = 25.6345879999我想将这个浮点型的数保留2位小数发送到串口,那我该怎么做呢?..._串口发浮点数

易语言PHP非对称加密,RSA非对称加密通信源码-程序员宅基地

文章浏览阅读573次。RSA非对称加密通信非对称加密是非常安全的一类加密算法TXQQ客户Duan的通信也用了椭圆曲线非对称加密(ECC)非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以..._易语言rsa算法

linux重定向文件输出到文件,【教程】linux 下重定向输入/输出到文件-程序员宅基地

文章浏览阅读879次。1. 引言今天考试遇到一个提交答案题,已经给出了答案检验器(已经编译了的,没有源码),但是手动输命令检验答案文件效率很低,我们最好是让检验器本来输出到屏幕的东西输出到文件,方便我们写程序自动检验。但是我们没有检验器源码,没法 freopen 怎么办呢 QvQ其实是 kb 提出了这个问题啦,下面我就来讲一下 linux(ubuntu)下的重定向输入/输出的方法。2. 输出重定向现在我们有个已经编译好..._重定向输出文件时怎么输出到文件的某一行