sl的原理和细节配置在之前两个博文中已经提到了。接下来总结下ssl的具体配置。主要感谢三篇文章。
ssl双向认证的客户端游览器的实现:
http://blog.csdn.net/jasonhwang/archive/2008/04/26/2329589.aspx
http://blog.csdn.net/jasonhwang/archive/2008/04/29/2344768.aspx
ssl双向认证的java调用实现:
http://www.blogjava.net/stone2083/archive/2007/12/20/169015.html
ssl双向认证的客户端游览器的实现主要是在Linux下实现的,稍微修改路径就可以在windows下实现。
注意:若客户端游览器没有ca证书的话,也是可以访问服务器的,客户端的ca证书是用来验证服务器是否有效的,若没有ca证书,游览器会弹出警告,让客户决定是否访问。
对于服务器端,用于签名的ca证书已经加入到trustKeyStore中,用于server认证客户端是否可信。
下面是主要代码:
env.bat:
set OPENSSL_HOME=C:\temp\testca
set SERVER=%OPENSSL_HOME%\Server
set CLIENT=%OPENSSL_HOME%\Client
set CA=%OPENSSL_HOME%\CA
set CONF=%OPENSSL_HOME%\conf
gentestca.conf:
[req]
default_keyfile = $ENV::OPENSSL_HOME/CA/cakey.pem
default_md = md5
prompt = no
distinguished_name = ca_distinguished_name
x509_extensions = ca_extensions
[ca_distinguished_name]
organizationName = VictorOrg
organizationalUnitName = VictorDepartment
commonName = VictorCA
emailAddress = ca_admin@victororg.com
[ca_extensions]
basicConstraints = CA:true
testca.conf:
[ ca ]
default_ca = testca # The default ca section
需要配置
[ testca ]
dir = $ENV::OPENSSL_HOME # top dir
database = $dir/index.txt # index file.
new_certs_dir = $dir/newcerts # new certs dir
certificate = $ENV::CA/cacert.pem # The CA cert
serial = $dir/serial # serial no file
private_key = $ENV::CA/cakey.pem # CA private key
RANDFILE = $ENV::CA/.rand # random number file
default_days = 365 # how long to certify for
default_crl_days= 30 # how long before next CRL
default_md = md5 # message digest method to use
unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
policy = policy_any # default policy
[ policy_any ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
generateCA.bat:
openssl req -x509 -newkey rsa:2048 -out CA/cacert.pem -outform PEM -days 2190 -config "%OPENSSL_HOME%\conf\gentestca.conf"
openssl pkcs12 -export -clcerts -in CA/cacert.pem -inkey CA/cakey.pem -out CA/root.p12
keytool -keystore %CA%\truststore.jks -keypass 444444 -storepass 444444 -alias ca -import -trustcacerts -file %CA%\cacert.pem
generateServer.bat:
openssl req -newkey rsa:1024 -keyout %SERVER%\serverkey.pem -keyform PEM -out %SERVER%\serverreq.pem -outform PEM -subj "/O=ABCom/OU=servers/CN=servername"
openssl ca -in %SERVER%\serverreq.pem -out %SERVER%\servercert.pem -config "%CONF%\testca.conf"
openssl pkcs12 -export -in %SERVER%\servercert.pem -inkey %SERVER%\serverkey.pem -out %SERVER%\server.p12 -name tomcat -CAfile "%CA%\cacert.pem" -caname root -chain
generateClient.bat:
openssl req -newkey rsa:1024 -keyout %CLIENT%\clientkey.pem -keyform PEM -out %CLIENT%\clientreq.pem -outform PEM -subj "/O=TestCom/OU=TestOU/CN=testuser1"
openssl ca -in %CLIENT%\clientreq.pem -out %CLIENT%\clientcert.pem -config "%CONF%\testca.conf"
openssl pkcs12 -export -in %CLIENT%\clientcert.pem -inkey %CLIENT%\clientkey.pem -out %CLIENT%\client.p12 -name client -chain -CAfile "%CA%\cacert.pem"
tomcat 中 server.xml:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
maxhttpheadersize="8192"
minsparethreads="25" maxsparethreads="75"
clientAuth="true" sslProtocol="TLS"
disableUploadTimeout="true" enableLookups="false" acceptCount="100"
keystoreType="PKCS12" keystoreFile="C:/temp/ca_9_13/server.p12" keystorePass="333333"
truststoreType="JKS" truststoreFile="C:/temp/ca_9_13/truststore.jks" truststorePass="444444"
/>
ssl双向认证的java调用实现:
用java代码调用服务器的https时,必须在客户端地java代码中的trustKeyStore加入服务器的ca,因为程序不能像人一样主观判断该网站是否可以访问。
env.bat,gentestca.conf,testca.conf,generateCA.bat与上面配置一致。
generateServerKeyStore.bat
:
keytool -keystore %SERVER%\server.jks -keypass 222222 -storepass 222222 -alias serverkey -genkey -keyalg RSA -dname "CN=servername, OU=servers, O=ABCom"
keytool -export -alias serverkey -keypass 222222 -storepass 222222 -keystore %SERVER%\server.jks -file %SERVER%\server.crt
keytool -import -alias serverkey -keypass 222222 -storepass 222222 -file %SERVER%\server.crt -keystore %CLIENT%\tclient.keystore
generateClientKeyStore.bat:
keytool -genkey -alias clientkey -keystore %CLIENT%\client.jks -keypass 777777 -storepass 777777 -keyalg RSA -dname "CN=servername, OU=servers, O=ABCom"
keytool -export -alias clientkey -keystore %CLIENT%\client.jks -file %CLIENT%\client.crt -keypass 777777 -storepass 777777
keytool -import -alias clientkey -file %CLIENT%\client.crt -keystore %SERVER%\tserver.keystore -keypass 777777 -storepass 777777
tomcat 中 server.xml:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
maxhttpheadersize="8192"
minsparethreads="25" maxsparethreads="75"
clientAuth="true" sslProtocol="TLS"
disableUploadTimeout="true" enableLookups="false" acceptCount="100"
keystoreFile="C:\temp\keystore_9_14\server.jks" keystorePass="222222" keystoreType="JKS"
truststoreFile="C:\temp\keystore_9_14\tserver.keystore" truststorePass="777777" truststoreType="JKS"
/>
客户端java代码:
public class HttpsTest {
public static final String CLIENT_KEY_STORE_PASSWORD = "777777";
public static final String CLIENT_TRUST_KEY_STORE_PASSWORD = "222222";
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}
public static void main(String[] args) throws NoSuchAlgorithmException, KeyStoreException, CertificateException, FileNotFoundException, IOException, UnrecoverableKeyException, KeyManagementException {
SSLContext ctx = SSLContext.getInstance("SSL");
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
KeyStore ks = KeyStore.getInstance("JKS");
KeyStore tks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("C:/temp/keystore_9_14/client.jks"), CLIENT_KEY_STORE_PASSWORD.toCharArray());
tks.load(new FileInputStream("C:/temp/keystore_9_14/tclient.keystore"), CLIENT_TRUST_KEY_STORE_PASSWORD.toCharArray());
kmf.init(ks, CLIENT_KEY_STORE_PASSWORD.toCharArray());
tmf.init(tks);
ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
String url = "https://****:8443/****";
URL myURL = new URL(url);
HttpsURLConnection httpsConn = (HttpsURLConnection) myURL.openConnection();
httpsConn.setHostnameVerifier(new TrustAnyHostnameVerifier());
httpsConn.setSSLSocketFactory(ctx.getSocketFactory());
httpsConn.setRequestMethod("GET");
httpsConn.setRequestProperty("Connection", "Keep-Alive");
httpsConn.setUseCaches(false);
httpsConn.setReadTimeout(60000);
httpsConn.setRequestProperty("Content-Type","text/html; charset=UTF-8");
if (httpsConn.getResponseMessage().equalsIgnoreCase("ok")) {
System.out.println("ok");
} else {
System.out.println("error");
}
}
}
代码下载:密码123456
分享到:
相关推荐
**Nginx SSL双向认证配置详解** 在网络安全日益重要的今天,服务器与客户端之间的通信安全成为了一个不可忽视的问题。本文将详细介绍如何在Nginx服务器上配置SSL双向认证,以提高服务器的安全性,允许只有经过验证...
Weblogic 配置 SSL 双向认证 Weblogic 配置 SSL 双向认证是为了确保 Web 应用程序的安全性和加密性。SSL(Secure Sockets Layer)是用于加密 Internet 通信的安全协议。双向认证是指客户端和服务端都需要验证对方的...
SSL(Secure Sockets Layer)双向认证...总的来说,SSL双向认证是一种强大的安全措施,它可以提供更高的信任度和数据保护,但同时也带来了额外的配置和管理挑战。在选择实施双向认证时,应根据实际需求和环境进行权衡。
此项目“android 使用HttpsURLConnection方式的SSL双向认证”着重讲解了如何在Android应用中通过HttpsURLConnection实现SSL的客户端和服务器端之间的双向身份验证,确保通信的隐私和完整性。 首先,我们需要理解SSL...
SSL 双向认证是一种高级的身份验证机制,它需要同时配置 Web 服务器证书和客户端证书,并在服务器和客户端之间正确安装根证书。下面将详细介绍如何通过 Tomcat 实现 SSL 双向认证。 概念:SSL/TLS SSL/TLS 是一种...
在ActiveMQ中配置SSL双向认证,我们需要以下步骤: 1. **生成证书**:首先,你需要为服务器和客户端分别生成证书。这通常通过使用OpenSSL工具完成,可以创建自签名证书或者由权威证书颁发机构(CA)签发。描述中...
总结,iOS和Android应用实现SSL双向认证HTTPS请求涉及到证书的创建、导入、配置以及自定义安全策略。开发者必须理解SSL/TLS的工作原理,以确保数据传输的安全性,同时兼顾用户体验。在实际应用中,建议遵循最佳实践...
Java中的SSL双向认证是一种安全通信机制,用于确保服务器和客户端之间的通信不仅加密,而且双方的身份都得到验证。这种机制在需要高安全性交互的应用场景中,如金融交易、企业内部网络通信等,尤其重要。 SSL...
在这个场景中,我们讨论的是如何在Java中设置和实现SSL套接字的双向认证。双向认证通常在高安全性环境中使用,例如银行、政府机构或企业内部网络,因为它们需要确保通信双方都是可信的。 首先,为了实现双向认证,...
java实现_SSL双向认证,里面详细介绍怎样实现,还包括完整的实现代码,直接可用
本文将详细介绍如何在 Tomcat 中实现 SSL 双向认证,包括使用 JDK 的 keytool 工具创建证书、配置 Tomcat 服务器和客户端证书等。 一、SSL 双向认证的重要性 在 Web 应用程序中,安全性是非常重要的,特别是在涉及...
下面将详细介绍Java实现SSL双向认证的步骤、关键概念和技术要点。 1. **生成证书**: - 服务器证书:首先,你需要为服务器生成一个自我签名的证书,这可以通过Java的keytool工具完成。创建一个Key Pair(公钥和...
通过`keytool`和`openssl`管理证书,以及在`TeslaSSLServer`和`TeslaSSLClient`中配置SSLContext,我们可以创建安全的双向认证连接。这个过程虽然复杂,但对于保护敏感数据的传输是必不可少的。
### Tomcat配置SSL双向认证详解 #### 一、SSL双向认证概述 SSL(Secure Sockets Layer,安全套接层)是一种用于确保Web通信安全的技术,它通过加密数据传输来保护信息不被未授权访问。SSL协议的核心是实现客户端与...
#### 三、SSL双向认证配置 - **配置要点**: - 在服务器端配置中启用双向认证功能。 - 选择合适的证书验证模式,如“要求证书且验证”。 - 确保客户端也配置了相应的证书以便进行身份验证。 #### 四、证书管理 ...
Java中的SSL双向认证是一种安全通信的方法,用于在网络中保护数据传输的安全性。它结合了SSL(Secure Sockets Layer)和TLS(Transport Layer Security)协议,这些协议提供了数据加密、服务器验证以及客户端验证等...
### 四、Tomcat6 SSL双向认证配置 编辑Tomcat的`conf/server.xml`文件,找到`<Connector>`元素,添加以下属性以启用SSL: ```xml clientAuth="true" sslProtocol="TLS" keystoreFile="path/to/server.p12" ...