tomcat7 ssl、basic认证、digest认证的配置和webservice的混合使用-留作笔记
- 博客分类:
- 技术杂绘
tomcat7 ssl、basic认证、digest认证的配置和webservice的混合使用-留作笔记
2011年10月28日
环境 tomcat7.0.24 + jdk7 +win7 好吧都是7哈哈管他三七二十一咯
第一步:在myeclipse8.6创建一个webservice要导入一些jar包(下载地址:http://115.com/file/aq633a7t)
package org.service;
import javax.jws.WebMethod;
import javax.jws.WebService;
@WebService
public interface FloatService {
@WebMethod float c2f(float c);
}
package org.service.impl;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.http.HTTPException;
import org.service.FloatService;
@WebService(endpointInterface = "org.service.FloatService")
public class FloatServiceImpl implements FloatService {
@Resource
WebServiceContext ws_ctx;
public float c2f(float c) {
if(authentucated()){
return 32.0f + (c * 0.9f / 5f);
}else{
throw new HTTPException(401);
}
}
public boolean authentucated(){
MessageContext mctx = ws_ctx.getMessageContext();
Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
List uList = (List) http_headers.get("username");
List pList = (List) http_headers.get("password");
if(uList.contains("jiangwu")&&pList.contains("1")){
return true;
}
return false;
}
}
在web.xml下有如下配置
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
FloatWS
com.sun.xml.ws.transport.http.servlet.WSServlet
FloatWS
/float
在WEB-INF目录下新建一个sun-javaws.xml
第二步: 打开命令行执行以下命令
cd /d "webservice工程的目录\webRoot\WEB-INF\classes"
D:\My Documents\web\floatservice\WebRoot\WEB-INF\classes>wsgen -cp . org.service.impl.FloatServiceImpl(jdk7的wsgen貌似不能使用jdk6是可用的D:\My Documents\web\floatservice\WebRoot\WEB-INF\classes>"D:\Program Files\Java\jdk1.6.0_24\bin\wsgen.exe" -cp . org.service.impl.FloatServiceImpl)==============生成jws工件
cd ../../
jar cvf float.war WEB-INF===================对工程打包
将war包放到tomcat的webapps目录下
第三步:为tomcat配置ssl
生成证书 keytool -genkey -alias tomcat -keyalg RSA -keystore "d:\.keystore" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass 123456 -storepass 123456
修改tomcat目录下/conf/server.xml文件找到如下代码段,深红色就是需要添加滴
启动tomcat访问https://localhost:8443/如果看到狮子说明配置成功
第四步:编写webservice的客户端代码
首先创建个web工程,接着在工程中新建个类installcert
import java.io.*;
import java.net.URL;
import java.security.*;
import java.security.cert.*;
import javax.net.ssl.*;
public class InstallCert {
public static void main(String[] args) throws Exception {
String host;
int port;
char[] passphrase;
if ((args.length == 1) || (args.length == 2)) {
String[] c = args[0].split(":");
host = c[0];
port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
String p = (args.length == 1) ? "changeit" : args[1];
passphrase = p.toCharArray();
} else {
System.out.println("Usage: java InstallCert [:port] [passphrase]");
return;
}
File file = new File("jssecacerts");
if (file.isFile() == false) {
char SEP = File.separatorChar;
File dir = new File(System.getProperty("java.home") + SEP
+ "lib" + SEP + "security");
file = new File(dir, "jssecacerts");
if (file.isFile() == false) {
file = new File(dir, "cacerts");
}
}
System.out.println("Loading KeyStore " + file + "...");
InputStream in = new FileInputStream(file);
System.out.println(in.available());
KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
ks.load(in, passphrase);
in.close();
SSLContext context = SSLContext.getInstance("TLS");
TrustManagerFactory tmf =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
context.init(null, new TrustManager[] {tm}, null);
SSLSocketFactory factory = context.getSocketFactory();
System.out.println("Opening connection to " + host + ":" + port + "...");
SSLSocket socket = (SSLSocket)factory.createSocket(host, port);
socket.setSoTimeout(10000);
try {
System.out.println("Starting SSL handshake...");
socket.startHandshake();
socket.close();
System.out.println();
System.out.println("No errors, certificate is already trusted");
} catch (SSLException e) {
System.out.println();
e.printStackTrace(System.out);
}
X509Certificate[] chain = tm.chain;
if (chain == null) {
System.out.println("Could not obtain server certificate chain");
return;
}
BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));
System.out.println();
System.out.println("Server sent " + chain.length + " certificate(s):");
System.out.println();
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
MessageDigest md5 = MessageDigest.getInstance("MD5");
for (int i = 0; i > 4]);
sb.append(HEXDIGITS[b & 15]);
sb.append(' ');
}
return sb.toString();
}
private static class SavingTrustManager implements X509TrustManager {
private final X509TrustManager tm;
private X509Certificate[] chain;
SavingTrustManager(X509TrustManager tm) {
this.tm = tm;
}
public X509Certificate[] getAcceptedIssuers() {
throw new UnsupportedOperationException();
}
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
throw new UnsupportedOperationException();
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
this.chain = chain;
tm.checkServerTrusted(chain, authType);
}
}
}
然后执行在命令行以下命令
cd /d "webservice客户端目录\WebRoot\WEB-INF\classes"
java InstallCert localhost:8443
命令行出现如下
Enter certificate to add to trusted keystore or 'q' to quit: [1]
此时键入1按回车键即可在 "webservice客户端目录\WebRoot\WEB-INF\classes"目录下生成jssecacerts文件,然后将其拷贝到java目录下\jre\lib\security下
cd ../../../src
wsimport -keep http://localhost:8443/工程名/web.xml配置的url-pattern的值?wsdl
刷新工程将看到两个包然后在默认包下新建类FloatClient
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.MessageContext;
import org.apache.catalina.realm.RealmBase;
import org.service.impl.FloatService;
import org.service.impl.FloatServiceImplService;
public class FloatServiceClient {
private static final String endpoint = "https://localhost:8443/float/float";
public static void main(String[] args) {
FloatServiceImplService service = new FloatServiceImplService();
FloatService port = service.getFloatServiceImplPort();
Map req_ctx = ((BindingProvider) port).getRequestContext();
req_ctx.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, endpoint);
Map> hdr = new HashMap>();
hdr.put("username", Collections.singletonList("jiangwu"));
hdr.put("password", Collections.singletonList("1"));
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, hdr);
System.out.println("c2f(-40.1) ==> " + port.c2F(-40.1f));
}
}
写好后以application方式运行
如果出现pikx的问题请把生成的jssecacerts复制到所有可能的java运行环境中
第四步:为应用程序和tomcat添加密码摘要的容器管理安全
首先:修改webservice的web.xml的配置,在文件中添加如下代码
admin
sessiontest secruity constraint
Protected Area
/float
admin
CONFIDENTIAL
DIGEST
然后使用tomcat带的digest工具生成铭文密码的摘要在命令行键入digest -a SHA 1(密码明文)
生成密文:356a192b7913b04c54574d18c28d46e6395428ab将他配置到tomcat-users文件中
接着重新打包工程同第二步不重复
再接着 就可以用浏览器访问下https://localhost:8443/float/float?wsdl如果弹出登陆框表示服务端和tomcat都配置好了
用amdin和356a192b7913b04c54574d18c28d46e6395428ab登陆看到wsdl文件那说明就完全ok了
第五步:客户端访问
暂时无解
发表评论
-
c语言基础 2
2012-01-20 09:37 514c语言基础 2 2011年03月05日 指针与数组(c语 ... -
NSIS用法注释
2012-01-20 09:37 1263NSIS用法注释 2011年03月08日 ;this i ... -
c#调用Win32 API
2012-01-20 09:37 739c#调用Win32 API 2010年10月29日 Wi ... -
用IIS发布网站
2012-01-20 09:37 565用IIS发布网站 2010年07月15日 1,安装iis ... -
DirectX简介
2012-01-20 09:37 535DirectX简介 2011年06月21日 1、Dire ... -
Spring+Hibernate+JPA常见小问题
2012-01-19 14:40 795Spring+Hibernate+JPA常见小问题 2011 ... -
javascript:history.go()和History.back()的区别
2012-01-19 14:40 701javascript:history.go()和History ... -
个人简历
2012-01-19 14:40 563个人简历 2011年02月17日 一、求职意向 应聘 ... -
JAVA基础加强(一)
2012-01-19 14:40 545JAVA基础加强(一) 2011年04月04日 2011 ... -
javascript函数库
2012-01-17 04:26 466javascript函数库 2010年06月14日 tr ... -
87个很有用的JavaScript函数以及基础写法汇总
2012-01-17 04:26 59387个很有用的JavaScript函数以及基础写法汇总 20 ... -
Js汇总
2012-01-17 04:26 316Js汇总 2010年07月31日 1.JS中的值类型:S ... -
每一项都是JS中的小技巧,但十分的实用!
2012-01-17 04:26 562每一项都是JS中的小技 ... -
107个常用Javascript语句
2012-01-17 04:26 530107个常用Javascript语句 2010年08月25日 ... -
最高境界的赞美
2012-01-16 03:15 524最高境界的赞美 2009年09月17日 爱美之心,人皆有 ... -
山东泰安话
2012-01-16 03:15 604山东泰安话 2011年12月26日 俺那里萝卜不叫萝卜 ... -
词语辨析
2012-01-16 03:15 758词语辨析 2010年05月03日 1、a few 、 ... -
赞美词精选-让赞美有词可用(上)作者:无忧演讲张文魁
2012-01-16 03:15 822赞美词精选-让赞美有词可用(上)作者:无忧演讲张文魁 201 ... -
女性最为吸引人的品质
2012-01-16 03:15 492女性最为吸引人的品质 ...
相关推荐
一个模拟http 401 Digest认证的登录海康NVR抓取摄像头列表的小demo
赠送jar包:t-digest-3.2.jar; 赠送原API文档:t-digest-3.2-javadoc.jar; 赠送源代码:t-digest-3.2-sources.jar; 赠送Maven依赖信息文件:t-digest-3.2.pom; 包含翻译后的API文档:t-digest-3.2-javadoc-API...
离线安装包,亲测可用
jboss4版本下,jbossweb-tomcat55.sar升级包,修复Apache Tomcat DIGEST身份验证多个安全漏洞(CVE-2012-3439) 升级包中的jar来源于tomcat5.5.36 使用方法:直接替换jboss中旧的jbossweb-tomcat55.sar
digest 用户认证 response生成算法.适用于大部分网络安全认证。
Symp Digest of Tech Papers - 2023 - Rui - 50 5 Pupil Swim Measurement and Analysis of Near‐eye displays(1)(3).pdf
赠送jar包:t-digest-3.0.jar; 赠送原API文档:t-digest-3.0-javadoc.jar; 赠送源代码:t-digest-3.0-sources.jar; 赠送Maven依赖信息文件:t-digest-3.0.pom; 包含翻译后的API文档:t-digest-3.0-javadoc-API...
Tomcat压缩包 资源下载,tomcat自带了一套管理程序,使用的是BASIC认证,与Digest认证的设置基本一致。无论是basic还是digest,设置过程基本一致,在conf/server.xml中添加realm数据源,在{project}/WEB-INF/web.xml...
本示例演示如何使用 3.x和通过HTTP Basic或HTTP Digest方案对用户进行身份验证。 使用此示例作为您自己的Web应用程序的起点。 指示 要在您的计算机上安装此示例,请克隆存储库并安装依赖项。 $ git clone git@...
赠送jar包:t-digest-3.2.jar; 赠送原API文档:t-digest-3.2-javadoc.jar; 赠送源代码:t-digest-3.2-sources.jar; 赠送Maven依赖信息文件:t-digest-3.2.pom; 包含翻译后的API文档:t-digest-3.2-javadoc-API...
赠送jar包:t-digest-3.0.jar; 赠送原API文档:t-digest-3.0-javadoc.jar; 赠送源代码:t-digest-3.0-sources.jar; 赠送Maven依赖信息文件:t-digest-3.0.pom; 包含翻译后的API文档:t-digest-3.0-javadoc-API...
使用AES256加密技术实现tomcat7对连接池数据库密码加密解密,资源中包含加密小程序,小程序实现加密,tomcat中实现解密,方便客户自己修改数据库密码且是密文!支持多操作系统如:linux mac os 文件太多分成两部分请...
Digest-Perl-MD5
gsoap编译,onvif示例,包含发现设备,获取设备能力,ptz控制,wsse鉴权和digest鉴权。
linux下apache页面认证+ssl
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
和MYSQLDUMPSLOW一样,也可以相对快速地进行筛选出需要优化的SQL语句,但是MK-QUERY-DIGEST的功能更加强大,可以将日志分析结果写入数据表中,可以很方便地实现慢日志的自动监控。 在使用MK-QUERY-DIGEST工具之前...
官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装
Basic认证 Basic认证是一种较为简单的HTTP认证方式,客户端通过明文(Base64编码格式)传输用户名和密码到服务端进行认证,通常需要配合HTTPS来保证信息传输的安全。 概述 Digest认证 是一种更加安全的认证形式, 在...
用于数据库性能回归测试的索引摘要操作 GitHub Action,用于运行 ,可分析您MySQL查询和架构并提出索引和架构改进建议。 通过此操作,您可以轻松地在持续集成管道中实施数据库性能回归测试。如何使用它我们假定您已...