`

Spring,smppapi,apache mina, ssl快速实现安全的smpp(6)

    博客分类:
  • MINA
阅读更多

接上一篇: http://618119.com/archives/2007/12/13/45.html

使用 commons ssl生成 SSLContext :

 

  1. package com.lizongbo.ssl;   
  2. import javax.net.ssl.SSLContext;   
  3. import java.security.GeneralSecurityException;   
  4. import java.io.IOException;   
  5. import javax.net.ssl.KeyManager;   
  6. import org.apache.commons.ssl.KeyMaterial;   
  7. public class SMPPSSLContextFactory {   
  8. private static final String PROTOCOL = “TLS”;   
  9. private static final String CA_FILE = “ca.crt.properties”;   
  10. private static final String CERT_FILE = “server.crt.properties”;   
  11. private static final String KEY_FILE = “server.key.properties”;   
  12. private static final String CILENT_FILE = “client.crt.properties”;;//”client.p12.properties”;   
  13. private static final String CILENT_KEY_FILE = “client.key.properties”;   
  14. private static final char[] password =new char[0] ;//”lizongbo”.toCharArray();   
  15. private static SSLContext serverInstance = null;   
  16. private static SSLContext clientInstance = null;   
  17. /**  
  18. * Get SSLContext singleton.  
  19. *  
  20. * @return SSLContext  
  21. * @throws java.security.GeneralSecurityException  
  22. *  
  23. */  
  24. public static SSLContext getInstance(boolean server) throws  
  25. GeneralSecurityException, IOException {   
  26. SSLContext retInstance = null;   
  27. if (server) {   
  28. if (serverInstance == null) {   
  29. synchronized (SMPPSSLContextFactory.class) {   
  30. if (serverInstance == null) {   
  31. try {   
  32. serverInstance = createSMPPServerSSLContext();   
  33. }   
  34. catch (Exception ioe) {   
  35. throw new GeneralSecurityException(   
  36. “Can’t create Server SSLContext:” + ioe);   
  37. }   
  38. }   
  39. }   
  40. }   
  41. retInstance = serverInstance;   
  42. }   
  43. else {   
  44. if (clientInstance == null) {   
  45. synchronized (SMPPSSLContextFactory.class) {   
  46. if (clientInstance == null) {   
  47. clientInstance = createSMPPClientSSLContext();   
  48. }   
  49. }   
  50. }   
  51. retInstance = clientInstance;   
  52. }   
  53. return retInstance;   
  54. }   
  55. private static SSLContext createSMPPServerSSLContext() throws  
  56. GeneralSecurityException, IOException {   
  57. // ssl.setCheckHostname(false); // default setting is “false” for SSLServer   
  58. // ssl.setCheckExpiry(true); // default setting is “true” for SSLServer   
  59. // ssl.setCheckCRL(true); // default setting is “true” for SSLServer   
  60. // ssl.useStrongCiphers();   
  61. // return ssl.getSSLContext();   
  62. SSLContext sslContext = SSLContext.getInstance(PROTOCOL);   
  63. KeyMaterial km = new KeyMaterial(SMPPSSLContextFactory.class  
  64. .getResourceAsStream(CERT_FILE),   
  65. SMPPSSLContextFactory.class  
  66. .getResourceAsStream(KEY_FILE),   
  67. password);   
  68. sslContext.init( (KeyManager[]) km.getKeyManagers(),   
  69. SMPPTrustManagerFactory.X509_MANAGERS, null);   
  70. // System.out.println(”getCipherSuites ==” +   
  71. // java.util.Arrays.toString(sslContext.getServerSessionContext().   
  72. // getSupportedSSLParameters().   
  73. // getCipherSuites()));   
  74. return sslContext;   
  75. }   
  76. private static SSLContext createSMPPClientSSLContext() throws  
  77. GeneralSecurityException, IOException {   
  78. {   
  79. SSLContext context = SSLContext.getInstance(PROTOCOL);   
  80. KeyMaterial km = new KeyMaterial(SMPPSSLContextFactory.class  
  81. .getResourceAsStream(CILENT_FILE),   
  82. SMPPSSLContextFactory.class  
  83. .getResourceAsStream(CILENT_KEY_FILE),   
  84. password);   
  85. context.init( (KeyManager[]) km.getKeyManagers(),   
  86. SMPPTrustManagerFactory.X509_MANAGERS, null);   
  87. return context;   
  88. }   
  89. }   
  90. }  
package com.lizongbo.ssl;
import javax.net.ssl.SSLContext;
import java.security.GeneralSecurityException;
import java.io.IOException;
import javax.net.ssl.KeyManager;
import org.apache.commons.ssl.KeyMaterial;
public class SMPPSSLContextFactory {
private static final String PROTOCOL = “TLS”;
private static final String CA_FILE = “ca.crt.properties”;
private static final String CERT_FILE = “server.crt.properties”;
private static final String KEY_FILE = “server.key.properties”;
private static final String CILENT_FILE = “client.crt.properties”;;//”client.p12.properties”;
private static final String CILENT_KEY_FILE = “client.key.properties”;
private static final char[] password =new char[0] ;//”lizongbo”.toCharArray();
private static SSLContext serverInstance = null;
private static SSLContext clientInstance = null;
/**
* Get SSLContext singleton.
*
* @return SSLContext
* @throws java.security.GeneralSecurityException
*
*/
public static SSLContext getInstance(boolean server) throws
GeneralSecurityException, IOException {
SSLContext retInstance = null;
if (server) {
if (serverInstance == null) {
synchronized (SMPPSSLContextFactory.class) {
if (serverInstance == null) {
try {
serverInstance = createSMPPServerSSLContext();
}
catch (Exception ioe) {
throw new GeneralSecurityException(
“Can’t create Server SSLContext:” + ioe);
}
}
}
}
retInstance = serverInstance;
}
else {
if (clientInstance == null) {
synchronized (SMPPSSLContextFactory.class) {
if (clientInstance == null) {
clientInstance = createSMPPClientSSLContext();
}
}
}
retInstance = clientInstance;
}
return retInstance;
}
private static SSLContext createSMPPServerSSLContext() throws
GeneralSecurityException, IOException {
// ssl.setCheckHostname(false); // default setting is “false” for SSLServer
// ssl.setCheckExpiry(true); // default setting is “true” for SSLServer
// ssl.setCheckCRL(true); // default setting is “true” for SSLServer
// ssl.useStrongCiphers();
// return ssl.getSSLContext();
SSLContext sslContext = SSLContext.getInstance(PROTOCOL);
KeyMaterial km = new KeyMaterial(SMPPSSLContextFactory.class
.getResourceAsStream(CERT_FILE),
SMPPSSLContextFactory.class
.getResourceAsStream(KEY_FILE),
password);
sslContext.init( (KeyManager[]) km.getKeyManagers(),
SMPPTrustManagerFactory.X509_MANAGERS, null);
// System.out.println(”getCipherSuites ==” +
// java.util.Arrays.toString(sslContext.getServerSessionContext().
// getSupportedSSLParameters().
// getCipherSuites()));
return sslContext;
}
private static SSLContext createSMPPClientSSLContext() throws
GeneralSecurityException, IOException {
{
SSLContext context = SSLContext.getInstance(PROTOCOL);
KeyMaterial km = new KeyMaterial(SMPPSSLContextFactory.class
.getResourceAsStream(CILENT_FILE),
SMPPSSLContextFactory.class
.getResourceAsStream(CILENT_KEY_FILE),
password);
context.init( (KeyManager[]) km.getKeyManagers(),
SMPPTrustManagerFactory.X509_MANAGERS, null);
return context;
}
}
}

 

实现证书检查认证的代码:

 

  1. package com.lizongbo.ssl;   
  2. import java.security.InvalidAlgorithmParameterException;   
  3. import java.security.KeyStore;   
  4. import java.security.KeyStoreException;   
  5. import java.security.cert.CertificateException;   
  6. import java.security.cert.X509Certificate;   
  7. import javax.net.ssl.ManagerFactoryParameters;   
  8. import javax.net.ssl.TrustManager;   
  9. import javax.net.ssl.TrustManagerFactorySpi;   
  10. import javax.net.ssl.X509TrustManager;   
  11. public class SMPPTrustManagerFactory   
  12. extends TrustManagerFactorySpi {   
  13. static final X509TrustManager X509 = new X509TrustManager() {   
  14. public void checkClientTrusted(X509Certificate[] x509Certificates,   
  15. String s) throws CertificateException {   
  16. if (x509Certificates != null) {   
  17. for (X509Certificate elem : x509Certificates) {   
  18. elem.checkValidity();   
  19. //System.out.println(”checkClientTrusted elem ==” + elem);   
  20. }   
  21. }   
  22. // System.out.println(”checkClientTrusted s ==” + s);   
  23. }   
  24. public void checkServerTrusted(X509Certificate[] x509Certificates,   
  25. String s) throws CertificateException {   
  26. if (x509Certificates != null) {   
  27. for (X509Certificate elem : x509Certificates) {   
  28. // System.out.println(”checkServerTrusted elem ==” + elem);   
  29. }   
  30. }   
  31. // System.out.println(”checkServerTrusted s ==” + s);   
  32. }   
  33. public X509Certificate[] getAcceptedIssuers() {   
  34. return new X509Certificate[0];   
  35. }   
  36. };   
  37. static final TrustManager[] X509_MANAGERS = new TrustManager[] {   
  38. X509};   
  39. public SMPPTrustManagerFactory() {   
  40. }   
  41. protected TrustManager[] engineGetTrustManagers() {   
  42. return X509_MANAGERS;   
  43. }   
  44. protected void engineInit(KeyStore keystore) throws KeyStoreException {   
  45. // noop   
  46. }   
  47. protected void engineInit(   
  48. ManagerFactoryParameters managerFactoryParameters) throws  
  49. InvalidAlgorithmParameterException {   
  50. // noop   
  51. }   
  52. }  
分享到:
评论
2 楼 lanmh 2008-08-05  
我也是初学者,从别人那里转来的。
1 楼 rxiaoliang 2008-08-05  
能不能写一个用smppapi相关函数连接短信中心收发短信的多线程程序啊。
我大概看了一下你写的这6篇文章,好像是用smppapi做短信中心的代码,不是客户端的。

相关推荐

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    Apache Mina Server 2.0 抢鲜体验

    6. **工具集成**:作为标签中的"工具",Apache Mina可以与其他开源工具如Spring、Hibernate等良好集成,为开发者提供更强大的功能和更便捷的开发环境。 7. **源码分析**:由于标签中提到了“源码”,因此,对于有志...

    mina2+spring结合实例

    在Java开发领域,Apache Mina和Spring框架的结合使用能够构建高效、可扩展的网络应用。Mina2作为一个轻量级的网络通信框架,提供了高度抽象的API,使得开发者可以方便地处理网络I/O操作。而Spring框架以其强大的依赖...

    Apache MINA 2.0 用户指南中英文对照阅读版[带书签]

    本资源包含两个 pdf 文档,一本根据官方最新文档 (http://mina.apache.org/mina-project/userguide/user-guide-toc.html) 整理的 mina_2.0_user_guide_en.pdf,一个中文翻译的 mina_2.0_user_guide_cn.pdf。...

    Apache_MINA_2_用户指南.pdf

    Apache MINA 2 是一个基于 Java 语言的网络应用框架,旨在帮助开发者快速构建高性能、可靠、可扩展的网络应用程序。该框架提供了一个灵活的架构,使得开发者可以轻松地构建各种类型的网络应用程序。 Part I - ...

    Apache_Mina_Server_2.0_V1.0.rar_apache_apache中文手册_mina

    Apache Mina 提供了一个统一的接口来处理多种类型的网络协议,如TCP/IP、UDP、SSL/TLS等。它允许开发者用相同的代码逻辑处理不同的传输协议,大大简化了网络编程的复杂性。Mina 的核心设计原则是事件驱动和非阻塞I/O...

    Apache_Mina_Server_2.0中文参考手册

    6. **社区支持**:作为Apache软件基金会的项目,Mina拥有活跃的开发者社区,提供了持续的更新和支持,用户可以在遇到问题时寻求社区的帮助。 7. **跨平台性**:由于基于Java开发,Apache Mina Server 2.0可以在任何...

    Apache_Mina_Server_ 深入教程

    讨论在Mina中如何处理网络异常,以及实现SSL/TLS加密,保证通信的安全性。 10. **持续学习与社区资源** 探索Apache Mina的官方文档、社区论坛、示例代码库等资源,以便持续学习和解决问题。 通过这个深入教程,...

    ApacheMina典型例子分析参考.pdf

    Apache Mina是一个强大的Java框架,专门用于构建高性能的异步并发网络通信应用。它支持多种通信协议,如TCP/IP、UDP/IP、串口通讯、VM间的管道通讯,以及SSL/TLS和JXM集成。此外,Mina也能够与IoC容器(如Spring和...

    Mina-2.0.7主要jar包

    3. **mina-integration-spring.jar**:对于使用Spring框架的开发者,此jar包允许将Mina组件无缝集成到Spring应用上下文中,实现依赖注入和管理。 4. **mina-filter-ssl.jar**:提供了SSL/TLS安全套接层支持,允许...

    mina2.0.9jar包下载

    4. **过滤器链**:Mina的过滤器链机制允许开发者插入自定义的过滤器,对网络通信进行预处理和后处理,如数据编码解码、安全认证等。 5. **丰富的协议支持**:Mina内建了对多种网络协议的支持,如HTTP、FTP、SSL/TLS...

    mina 学习资料

    9. **MINA与Spring集成**:MINA可以与Spring框架无缝集成,利用Spring的依赖注入和配置管理特性,简化MINA应用的开发和维护。 10. **最佳实践**:学习MINA的过程中,了解最佳实践至关重要,例如如何优化性能,如何...

    mina-master_mina_

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个高度可扩展且功能丰富的网络应用程序框架,主要用于简化开发高性能、高效率的服务端应用。MINA提供了一种与传输协议无关的API,支持多种...

    Mina2中文文档

    - **安全传输**:介绍了Mina支持的SSL过滤器,用于实现加密通信的安全保障。 #### Chapter 12 - 日志过滤器 - **日志管理**:讲解了如何使用Mina的日志过滤器记录应用程序运行时的各种日志信息。 ### Part III - ...

    Mina 2.0.0包

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,主要用于简化开发协议服务器和客户端的复杂性。在“Mina 2.0.0包”中,我们可以期待一系列的改进和新特性,使得开发人员能够更高效地构建网络通信应用。 ...

    基于Java的源码-mina高性能Java网络框架.zip

    9. **mina-integration**模块:这些是与Mina整合的其他技术,如Spring框架的整合,便于在Spring应用中使用Mina。 10. **mina-example**模块:包含了一些示例代码,可以帮助初学者快速理解如何使用Mina构建实际应用...

    mina用法及用到的包

    3. **协议栈支持**:MINA支持多种网络协议,如TCP/IP、UDP、SSL/TLS等,开发者可以通过简单的API实现自定义协议。 4. **Filter链**:MINA的核心设计之一是Filter(过滤器)机制,它允许开发者创建一系列处理数据的...

    Apache Ftpserver

    默认的网络支持基于高性能异步IO库Apache MINA。 使用MINA,FtpServer可以扩展到大量并发用户。 特性 1、100%纯Java,免费的开源可恢复FTP服务器 2、多平台支持和多线程设计。 3、用户虚拟目录,写入权限,空闲...

    Apache组织应用程序

    Mina提供了异步的I/O操作,支持多种传输协议,如TCP、UDP和SSL/TLS,这使得它在处理高并发、低延迟的网络服务时表现出色。 在"MinaTest"这个压缩包文件中,很可能是包含了一些关于如何使用Mina进行应用开发的示例...

    mina 开发需要的类库。。

    3. **mina-protocol-XXX**:MINA提供了多种协议实现,如TCP、UDP、SSL/TLS等,这些协议的实现库可能包含在压缩包中。 4. **mina-handler-XXX**:这些可能是MINA提供的各种处理器,如协议编解码处理器、日志处理器、...

Global site tag (gtag.js) - Google Analytics