From:http://www.99inf.net/SoftwareDev/Java/51003.htm
在网络上信息在源-宿的传递过程中会经过其它的计算机。一般情况下,中间的计算机不会监听路过的信息。但在使用网上银行或者进行信用卡交易的时候有可能被监视,从而导致个人隐私的泄露。由于Internet和Intranet体系结构的原因,总有某些人能够读取并替换用户发出的信息。随着网上支付的不断发展,人们对信息安全的要求越来越高。因此Netscape公司提出了SSL协议,旨在达到在开放网络(Internet)上安全保密地传输信息的目的,这种协议在WEB上获得了广泛的应用。 之后IETF(www.ietf.org)对SSL作了标准化,即RFC2246,并将其称为TLS(Transport Layer Security),从技术上讲,TLS1.0与SSL3.0的差别非常微小。
SSL协议使用不对称加密技术实现会话双方之间信息的安全传递。可以实现信息传递的保密性、完整性,并且会话双方能鉴别对方身份。不同于常用的http协议,我们在与网站建立SSL安全连接时使用https协议,即采用https://ip:port/的方式来访问。
当我们与一个网站建立https连接时,我们的浏览器与Web Server之间要经过一个握手的过程来完成身份鉴定与密钥交换,从而建立安全连接。具体过程如下:
1.在openssl的apps目录下建立自己的CA目录,例如:mageCA
mkdir mageCA
2.生成CA密钥
openssl genrsa -out mageCA/ca-key.pem 1024
genrsa
[
产生密钥命令
]
–out
[
密钥文件输出路径
]
1024 [
密钥位数
]
3.生成待签名的证书
openssl req -new -out mageCA/ca-req.csr -key mageCA/ca-key.pem
req[
产生证书命令
]-new[
新生成
]-out[
证书文件输出路径
]-key[
私钥文件路径]
4.用CA私钥自签名
openssl x509 -req -in mageCA/ca-req.csr -out mageCA/ca-cert.pem -signkey mageCA/ca-key.pem -days 365
x509[
签发
x509
证书命令]
-req[
输入待签发证书
]-in[
输入待签发证书文件路径
]-out[
产生
x509
证书文件输出路径
]-signkey[
自签发密钥文件路径
]-days
[证书有效期
]–CA
[签发跟证书
]-Cakey[
根证书密钥文件
] –Cacreateserial[
创建序列号
]
[注] 将自动生成的ca-key.srl文件拷贝到创建的CA目录下.。
[注] 在本文中用符号"%JDK_HOME%"来表示JDK的安装位置,用符号"%TCAT_HOME%" 表示Tomcat的安装位置。
1. 建立工作目录
在%JDK_HOME%的bin目录下建立自己的server目录,例如:server
mkdir server
2. 生成server密钥对
%JDK_HOME%/bin/keytool -genkey -alias tomcat_server -validity 365 -keyalg RSA -keysize 1024 -keypass changeit -storepass changeit -dname "cn=localhost, ou=department, o=company, l=Beijing, st=Beijing, c=CN" -keystore server/server_keystore
-genkey[
产生密钥对
]-alias[
密钥对别名
]-validity[
密钥有效期
]-keyalg[
密钥算法参数
]-keysize[
密钥位数
]-keypass[
密钥保护密码
]-storepass[
存储密码
]-dname[
别名相关附加信息
]-keystore[
密钥存储文件路径
]
[注] -alias后的tomcat_server是密钥对的名字可替换为自己需要的名字;
-keypass与-storepass后的changeit为保护密码必须6位,将其替换为你的密码即可;
-dname为包含的server信息。其中cn是服务器的名字一定要与WEB服务器中设置的一样。
3. 生成待签名证书
%JDK_HOME%/bin/keytool -certreq -alias tomcat_server -sigalg MD5withRSA -file server/server.csr -keypass changeit -keystore server/server_keystore -storepass changeit
-certreq[
产生待签名证书
]-alias[
证书别名
]-sigalg[
证书算法参数
]-file [
产生文件输出路径
]-keypass[
密钥保护密码
]-keystore[
存储文件路径
]-storepass[
存储密码]
4. 用CA私钥签名
openssl x509 -req -in server/server.csr -out server/server-cert.pem -CA mageCA/ca-cert.pem -CAkey mageCA/ca-key.pem -days 365
[注]
先将生成的server.csr文件ftp到linux上openssl的目录下的server子目录中,ftp的传输模式应设为bin模式,以下同。
1. 导入CA根证书
将CA根证书(ca-cert.pem)ftp到Java工作目录下的ca子目录中
%JDK_HOME%/bin/keytool -import -v -trustcacerts -storepass changeit -alias my_ca_root -file ca/ca-cert.pem -keystore %JDK_HOME%/jre/lib/security/cacerts
-import[
导入命令
]-v –trustcacerts[
导入信任证书
] –storepass[
存储密码
]-alias[
证书别名
]-file[
证书文件路径
]-keystore[
导入文件路径
]
[注] 此处的-storepass为默认的“changeit”。-alias为CA根证书的别名。
2. 导入服务器证书
将服务器证书(server-cert.pem)ftp到Java工作目录下的server子目录中。
%JDK_HOME%/bin/keytool -import -v -trustcacerts -storepass changeit -alias tomcat_server -file server/server-cert.pem -keystore server/server_keystore
[注] 此时的-storepass为生成证书时输入密码。-alias为服务器证书的别名。
3. 查看证书
查看CA证书
keytool -list -keystore %JDK_HOME%/jre/lib/security/cacerts
查看服务器证书
keytool -list -keystore server/server_keystore
修改conf目录下server.xml文件找到以下内容去掉其注释并修改。
<!-- Define an SSL HTTP/1.1 Connector on port 8443 -->
<Connector className="org.apache.catalina.connector.http.HttpConnector"
port="8443" minProcessors="5" maxProcessors="75"
enableLookups="false"
acceptCount="10" debug="0" scheme="https" secure="true">
<Factory className="org.apache.catalina.net.SSLServerSocketFactory"
clientAuth="true" protocol="TLS"
keystoreFile="c:/jakarta-tomcat-4.0-b1/conf/server_keystore" keystorePass="780608"
/>
</Connector>
然后把文件server/ server_keystore复制到目录%TCAT_HOME%\conf\下
1. openssl的apps目录下建立自己的Client目录,例如:client
2. 生成Client密钥对
openssl genrsa -out client/ client –key.pem 1024
3. 生成待签名的证书
openssl req -new -out client/ client-req.csr -key client/ client-key.pem
4. 用CA私钥签名
openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey c lient/client-key.pem -CA ca/ca-cert.pem -CAkey ca/ca-key.pem -CAcreateserial -days 365
5. 生成Client端可以导入的个人证书
openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
pkcs12[
生成PKS12格式证书命令
]-export[
导出文件
]-clerts[
仅导出client证书
]-in[
输入的client证书文件路径
]-inkey[
client证书密钥文件路径
]-out[
导出PKS12格式文件路径]
1. 导入CA根证书
将已经ftp到Java工作目录下ca子目录中的ca-cert.pem改名为ca-cert.cer;
在client端的IE中使用<工具>,< Internet选项>,<内容>,<证书>,<导入>,