linux下https连接本地站点
来源:互联网 发布:linux清屏命令快捷键 编辑:程序博客网 时间:2024/06/06 03:24
接我上一篇看博客,生成的.keystore在我的用户根目录/home/liz下,然后编辑tomcat服务器的server.xml,开放https,端口默认是8443
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFilekeystoreFile="/home/liz/.keystore"keystorePass="123456"/>
重启tomcat,在浏览器输入https://localhost:8443/ 可以看到成功了。
接下来是写个https客户端测试下
代码如下
package https;import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.MalformedURLException; import java.net.URL; import java.security.GeneralSecurityException; import java.security.KeyStore; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; public class HttpsPost { /** * 获得KeyStore. * @param keyStorePath * 密钥库路径 * @param password * 密码 * @return 密钥库 * @throws Exception */ public static KeyStore getKeyStore(String password, String keyStorePath) throws Exception { // 实例化密钥库 KeyStore ks = KeyStore.getInstance("JKS"); // 获得密钥库文件流 FileInputStream is = new FileInputStream(keyStorePath); // 加载密钥库 ks.load(is, password.toCharArray()); // 关闭密钥库文件流 is.close(); return ks; } /** * 获得SSLSocketFactory. * @param password * 密码 * @param keyStorePath * 密钥库路径 * @param trustStorePath * 信任库路径 * @return SSLSocketFactory * @throws Exception */ public static SSLContext getSSLContext(String password, String keyStorePath, String trustStorePath) throws Exception { // 实例化密钥库 KeyManagerFactory keyManagerFactory = KeyManagerFactory .getInstance(KeyManagerFactory.getDefaultAlgorithm()); // 获得密钥库 KeyStore keyStore = getKeyStore(password, keyStorePath); // 初始化密钥工厂 keyManagerFactory.init(keyStore, password.toCharArray()); // 实例化信任库 TrustManagerFactory trustManagerFactory = TrustManagerFactory .getInstance(TrustManagerFactory.getDefaultAlgorithm()); // 获得信任库 KeyStore trustStore = getKeyStore(password, trustStorePath); // 初始化信任库 trustManagerFactory.init(trustStore); // 实例化SSL上下文 SSLContext ctx = SSLContext.getInstance("TLS"); // 初始化SSL上下文 ctx.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null); // 获得SSLSocketFactory return ctx; } /** * 初始化HttpsURLConnection. * @param password * 密码 * @param keyStorePath * 密钥库路径 * @param trustStorePath * 信任库路径 * @throws Exception */ public static void initHttpsURLConnection(String password, String keyStorePath, String trustStorePath) throws Exception { // 声明SSL上下文 SSLContext sslContext = null; // 实例化主机名验证接口 HostnameVerifier hnv = new MyHostnameVerifier(); try { sslContext = getSSLContext(password, keyStorePath, trustStorePath); } catch (GeneralSecurityException e) { e.printStackTrace(); } if (sslContext != null) { HttpsURLConnection.setDefaultSSLSocketFactory(sslContext .getSocketFactory()); } HttpsURLConnection.setDefaultHostnameVerifier(hnv); } /** * 发送请求. * @param httpsUrl * 请求的地址 * @param xmlStr * 请求的数据 */ public static void post(String httpsUrl, String xmlStr) { HttpsURLConnection urlCon = null; try { urlCon = (HttpsURLConnection) (new URL(httpsUrl)).openConnection(); urlCon.setDoInput(true); urlCon.setDoOutput(true); urlCon.setRequestMethod("POST"); urlCon.setRequestProperty("Content-Length", String.valueOf(xmlStr.getBytes().length)); urlCon.setUseCaches(false); //设置为gbk可以解决服务器接收时读取的数据中文乱码问题 urlCon.getOutputStream().write(xmlStr.getBytes("gbk")); urlCon.getOutputStream().flush(); urlCon.getOutputStream().close(); BufferedReader in = new BufferedReader(new InputStreamReader( urlCon.getInputStream())); String line; while ((line = in.readLine()) != null) { System.out.println(line); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 测试方法. * @param args * @throws Exception */ public static void main(String[] args) throws Exception { // 密码 String password = "123456"; // 密钥库 String keyStorePath = "/home/liz/.keystore"; // 信任库 String trustStorePath = "/home/liz/.keystore"; // 本地起的https服务 String httpsUrl = "https://localhost:8443"; // 传输文本 String xmlStr = ""; HttpsPost.initHttpsURLConnection(password, keyStorePath, trustStorePath); // 发起请求 HttpsPost.post(httpsUrl, xmlStr); } }
package https;import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLSession; /** * 实现用于主机名验证的基接口。 * 在握手期间,如果 URL 的主机名和服务器的标识主机名不匹配,则验证机制可以回调此接口的实现程序来确定是否应该允许此连接。 */ public class MyHostnameVerifier implements HostnameVerifier { @Override public boolean verify(String hostname, SSLSession session) { if("localhost".equals(hostname)){ return true; } else { return false; } } }
0 0
- linux下https连接本地站点
- wampserver 打造https 站点(下)
- Linux下配置https安全连接(ssl加密连接)
- Apache连接本地自定义站点服务器
- SSH连接下复制远程linux服务器文件到本地
- windows、linux下java连接本地MQ队列实现输入
- iOS之使用NSURLConnection连接HTTPS(SSL)站点
- Linux下配置多站点
- Nginx下配置HTTPS(SSL)安全站点
- centos7下基于nginx,http站点转换https
- wdcp 下apache模式开启https访问,支持多站点
- Linux使用curl访问https站点时报错汇总
- Linux使用curl访问https站点时报错汇总
- Linux使用curl访问https站点时报错汇总
- Windows下Qt应用程序可以连接本地MYSQL不能连接linux的问题
- 在linux下的apache配置https协议,开启ssl连接
- linux 下配置 https ssl
- Android平台下Https连接准备工作
- 【整理】adb命令、adb shell与Linux各种命令
- DHCP
- Jetty 的工作原理以及与 Tomcat 的比较
- 四季
- Ubuntu下测试RT-Linux的性能
- linux下https连接本地站点
- vl4 linuxtv
- VirtualBox 4.3.6 编译 for 64bit Windows
- Ubuntu定时截屏功能
- Qt 实现登录功能
- AMQP消息服务器RabbitMQ
- 长微博图片实现:将文字转成图片
- LevelDB源码之SkipList原理
- 使用Winbase.h错误的解决