- 浏览: 5203 次
- 性别:
- 来自: 南京
最近访客 更多访客>>
最新评论
-
daquan198163:
cas validateUrl要配置为域名,并且这个域名要跟c ...
数字认证的迷惑 -
lwhlwh:
<div class="quote_title ...
数字认证的迷惑 -
tobackfurture:
期待LZ早日总结文章,谢谢!
数字认证的迷惑 -
xingzhaozhong:
1.客户端的IE是否导入了身份证书?否则怎么提示没有可选证书
...
数字认证的迷惑 -
lucky16:
grandboy 写道你这个没有启动双向认证,自然不会有选择客 ...
数字认证的迷惑
最近新接手做一个数字认证,且自己充当CA中心。在制作出CA,server端证书和client端证书后,在TOMCAT的配置如下: 应用系统中web.xml中如下设置: <!-- Authorization setting for SSL --> CLIENT-CERT Client Cert Users-only Area <!-- Authorization setting for SSL --> SSL /SSL/* CONFIDENTIAL 最后启动服务器,当进入ssl文件的时候,的确有询问数字证书弹出,参见附件1图片。但是这种询问只能说你建立了SSL通道,并没有选择用户的证书,所以 后台在验证用户提交的证书的时候,得到的是空。理论情况下应该是如附件2的样子,弹出对话框,用户可以选择已经安装的证书,提交,然后后台验证用户提交来 的证书。但是就比较困惑这个读取客户端所有证书的插件是如何做出来的?还是说IE里面本有此插件,只需要服务器配置就可以的了。
评论
14 楼
daquan198163
2009-08-17
我msn上不去了,就在这儿说吧。
我觉得是keystoreType="jks"导致的出错,说明服务器不认这个证书类型。
keystoreFile、keystorePass、keystoreType用途很明确,就是告诉tomcat到哪儿以及如何读取服务器数字证书,
多客户端证书跟这三个参数没有关系。
所以你在操作5里说“多个客户端证书,要将server端做成jks文件,便于下面客户端导入”,这是不对的,
客户端证书不应导入server端证书文件,而应该用keytool奖客户证书导入server端jre信任库文件。
我觉得是keystoreType="jks"导致的出错,说明服务器不认这个证书类型。
keystoreFile、keystorePass、keystoreType用途很明确,就是告诉tomcat到哪儿以及如何读取服务器数字证书,
多客户端证书跟这三个参数没有关系。
所以你在操作5里说“多个客户端证书,要将server端做成jks文件,便于下面客户端导入”,这是不对的,
客户端证书不应导入server端证书文件,而应该用keytool奖客户证书导入server端jre信任库文件。
13 楼
ximencf
2009-08-17
昨天的没有弹出来是因为客户端没有安装多个授权的证书,所以默认的就一个,但是假如客户端安装多个的话,server端的p12格式就不行了,就用jks, 但是jks的话,keystore就为server.jks,然后将客户端生成的所有证书导入到server.jks。出现了
错误,且一直闪动,不得己关闭服务器。整个过程如下:
第一步::生成信任CA中心
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12
第二步.生成server证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.(单个的用p12文件) 将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
5, 多个客户端证书,要将server端做成jks文件,便于下面客户端导入。keytool -import -v -trustcacerts -storepass password -alias server1 -file server/server-cert.pem -keystore server.jks
第三步.生成client证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
5.将生成的客户端文件导入server.jks文件中。keytool -import -v -trustcacerts -storepass password -alias client1 -file client/client-cert.pem -keystore server.jks
第四步.根据root证书生成jks文件
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass password -alias root -file root/root-cert.pem -keystore root.jks
keytool -list -keystore server.jks 可以看到有2个文件,server1 和client1
第五步:将root.p12,client.p12分别导入到IE中去(打开IE->;Internet选项->内容->证书)。
root.p12导入至受信任的根证书颁发机构,client.p12导入至个人
单个server证书和client证书,去掉上面第二步里面的5和第三步里面的5,配置如下
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS" SSLEnabled="true"
keystoreFile="C:\CA\server\server.p12"
keystorePass="password" keystoreType="PKCS12"
truststoreFile="C:\CA\root.jks"
truststorePass="password" truststoreType="jks"/>
就正确,且能读出客户端的证书的信息,如果加入多个client证书, 上面配置不变,就会跳出选择框,请选择客户端安装的证书,且也能读出证书的信息。
多个client端,keystore为jks型的时候报错。
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS" SSLEnabled="true"
keystoreFile="C:\CA\server\server.jks"
keystorePass="password" keystoreType="jks"
truststoreFile="C:\CA\root.jks"
truststorePass="password" truststoreType="jks"/>
启动tomacat的时候,报严重: Socket accept failed
java.net.SocketException: SSL handshake errorjavax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.acceptSocket(JSSESocketFactory.java:150)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310)
at java.lang.Thread.run(Thread.java:595)
且一直跳,看来是连接报什么错误,只能强制关服务器。
JE们还有什么高招啊?
java.net.SocketException: SSL handshake errorjavax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled. at org.apache.tomcat.util.net.jsse.JSSESocketFactory.acceptSocket(JSSESocketFactory.java:150) at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310) at java.lang.Thread.run(Thread.java:595)
错误,且一直闪动,不得己关闭服务器。整个过程如下:
第一步::生成信任CA中心
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12
第二步.生成server证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.(单个的用p12文件) 将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
5, 多个客户端证书,要将server端做成jks文件,便于下面客户端导入。keytool -import -v -trustcacerts -storepass password -alias server1 -file server/server-cert.pem -keystore server.jks
第三步.生成client证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 :C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
5.将生成的客户端文件导入server.jks文件中。keytool -import -v -trustcacerts -storepass password -alias client1 -file client/client-cert.pem -keystore server.jks
第四步.根据root证书生成jks文件
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass password -alias root -file root/root-cert.pem -keystore root.jks
keytool -list -keystore server.jks 可以看到有2个文件,server1 和client1
第五步:将root.p12,client.p12分别导入到IE中去(打开IE->;Internet选项->内容->证书)。
root.p12导入至受信任的根证书颁发机构,client.p12导入至个人
单个server证书和client证书,去掉上面第二步里面的5和第三步里面的5,配置如下
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS" SSLEnabled="true"
keystoreFile="C:\CA\server\server.p12"
keystorePass="password" keystoreType="PKCS12"
truststoreFile="C:\CA\root.jks"
truststorePass="password" truststoreType="jks"/>
就正确,且能读出客户端的证书的信息,如果加入多个client证书, 上面配置不变,就会跳出选择框,请选择客户端安装的证书,且也能读出证书的信息。
多个client端,keystore为jks型的时候报错。
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS" SSLEnabled="true"
keystoreFile="C:\CA\server\server.jks"
keystorePass="password" keystoreType="jks"
truststoreFile="C:\CA\root.jks"
truststorePass="password" truststoreType="jks"/>
启动tomacat的时候,报严重: Socket accept failed
java.net.SocketException: SSL handshake errorjavax.net.ssl.SSLException: No available certificate or key corresponds to the SSL cipher suites which are enabled.
at org.apache.tomcat.util.net.jsse.JSSESocketFactory.acceptSocket(JSSESocketFactory.java:150)
at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:310)
at java.lang.Thread.run(Thread.java:595)
且一直跳,看来是连接报什么错误,只能强制关服务器。
JE们还有什么高招啊?
12 楼
grandboy
2009-08-16
ximencf 写道
我说下我的整个过程,看看在哪里还是有错。
1.生成CA证书。目前不使用第三方权威机构的CA来认证,自己充当CA的角色。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12
2.生成server证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 (导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
3.生成client证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
4.根据root证书生成jks文件
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass ximencf -alias root -file root/root-cert.pem -keystore root.jks
<connector secure="true" scheme="https" protocol="HTTP/1.1" port="8443"
sslenabled="true" maxhttpheadersize="8192" maxthreads="150"
minsparethreads="25" maxsparethreads="75" enablelookups="false"
disableuploadtimeout="true" acceptcount="100" sslprotocol="TLS"
clientauth="true" keystorefile="server.p12"
keystoretype="PKCS12" keystorepass="123456" truststorefile="root.jks"
truststoretype="JKS" truststorepass="123456"/>
root.p12,client.p12分别导入到IE中
这样子,在启动tomcat的时候就会报invlidate keystore format错误,即认为keystore的类型是不正确,我已经指定了其为PKCS12类型的啊,同时,我也希望实现双向认证。
1.生成CA证书。目前不使用第三方权威机构的CA来认证,自己充当CA的角色。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12
2.生成server证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 (导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
3.生成client证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
4.根据root证书生成jks文件
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass ximencf -alias root -file root/root-cert.pem -keystore root.jks
<connector secure="true" scheme="https" protocol="HTTP/1.1" port="8443"
sslenabled="true" maxhttpheadersize="8192" maxthreads="150"
minsparethreads="25" maxsparethreads="75" enablelookups="false"
disableuploadtimeout="true" acceptcount="100" sslprotocol="TLS"
clientauth="true" keystorefile="server.p12"
keystoretype="PKCS12" keystorepass="123456" truststorefile="root.jks"
truststoretype="JKS" truststorepass="123456"/>
root.p12,client.p12分别导入到IE中
这样子,在启动tomcat的时候就会报invlidate keystore format错误,即认为keystore的类型是不正确,我已经指定了其为PKCS12类型的啊,同时,我也希望实现双向认证。
你的过程基本上没有问题,虽然有些地方不是必要的。但是本来应该成功的。你之所以没有成功,应该有以下几点你需要注意的:
1. 第一个问题,
引用
4.根据root证书生成jks文件
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass ximencf -alias root -file root/root-cert.pem -keystore root.jks
你这里生成jks时用的storepass口令是ximencf, 而且配置tomcat的时候,你用的是什么?是123456。
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass ximencf -alias root -file root/root-cert.pem -keystore root.jks
2. xml文件是区分大小写的,你写在server.xml里的内容有些是通过MBean赋值到tomcat的javabean里的,如果你大小写搞错了,他也无法认识。举例:如keystoreFile如果你写成keystorefile, tomcat就不知道这个文件在哪里,因为你指定的文件路径并没有通过MBean赋值到Tomcat里的javabean。当然,这很有可能是你的拷贝的时候或者javaeye的editor的问题,我只是说一下,防止以后还有人犯这样的错误。
3. 最后一点就是文件的路径,如果像你那样没有指定路径的话,tomcat会到根目录下去找文件,如果文件不是放在根目录下,也是找不到的。
希望你这次成功。
11 楼
ximencf
2009-08-16
我说下我的整个过程,看看在哪里还是有错。
1.生成CA证书。目前不使用第三方权威机构的CA来认证,自己充当CA的角色。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12
2.生成server证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 (导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
3.生成client证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
4.根据root证书生成jks文件
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass ximencf -alias root -file root/root-cert.pem -keystore root.jks
<connector secure="true" scheme="https" protocol="HTTP/1.1" port="8443"
sslenabled="true" maxhttpheadersize="8192" maxthreads="150"
minsparethreads="25" maxsparethreads="75" enablelookups="false"
disableuploadtimeout="true" acceptcount="100" sslprotocol="TLS"
clientauth="true" keystorefile="server.p12"
keystoretype="PKCS12" keystorepass="123456" truststorefile="root.jks"
truststoretype="JKS" truststorepass="123456"/>
root.p12,client.p12分别导入到IE中
这样子,在启动tomcat的时候就会报invlidate keystore format错误,即认为keystore的类型是不正确,我已经指定了其为PKCS12类型的啊,同时,我也希望实现双向认证。
1.生成CA证书。目前不使用第三方权威机构的CA来认证,自己充当CA的角色。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out root/root-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out root/root-req.csr -key root/root-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in root/root-cert.pem -inkey root/root-key.pem -out root/root.p12
2.生成server证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out server/server-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out server/server-req.csr -key server/server-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式 (导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in server/server-cert.pem -inkey server/server-key.pem -out server/server.p12
3.生成client证书。
1.创建私钥 :C:\OpenSSL\apps>openssl genrsa -out client/client-key.pem 1024
2.创建证书请求 :C:\OpenSSL\apps>openssl req -new -out client/client-req.csr -key client/client-key.pem
3.自签署证书 :C:\OpenSSL\apps>openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650
4.将证书导出成浏览器支持的.p12格式(导出密码123456):C:\OpenSSL\apps>openssl pkcs12 -export -clcerts -in client/client-cert.pem -inkey client/client-key.pem -out client/client.p12
4.根据root证书生成jks文件
C:\OpenSSL\apps\keytool -import -v -trustcacerts -storepass ximencf -alias root -file root/root-cert.pem -keystore root.jks
<connector secure="true" scheme="https" protocol="HTTP/1.1" port="8443"
sslenabled="true" maxhttpheadersize="8192" maxthreads="150"
minsparethreads="25" maxsparethreads="75" enablelookups="false"
disableuploadtimeout="true" acceptcount="100" sslprotocol="TLS"
clientauth="true" keystorefile="server.p12"
keystoretype="PKCS12" keystorepass="123456" truststorefile="root.jks"
truststoretype="JKS" truststorepass="123456"/>
root.p12,client.p12分别导入到IE中
这样子,在启动tomcat的时候就会报invlidate keystore format错误,即认为keystore的类型是不正确,我已经指定了其为PKCS12类型的啊,同时,我也希望实现双向认证。
10 楼
danni505
2009-08-16
我前段时间做个一个CA系统,用的是EJB,有兴趣可以交流交流
9 楼
javaTo
2009-08-16
去年的时候做过一个,不过没在web.xml里配置,另外看你8443配的也没什么问题,有几个关键代码需要注意
static final String DEFAULT_CERT_KEY = "javax.servlet.request.X509Certificate"; // 通过调用此方法,就会弹出让你选择证书的那个界面 // 注意这个request是使用https的,否则获取不到的证书 X509Certificate certs[] = (X509Certificate[]) request.getAttribute(DEFAULT_CERT_KEY);
8 楼
whaosoft
2009-08-16
ls的人好厉害 为什么牛人都跑北京去了
不过查了下 就应该是p12
不过查了下 就应该是p12
7 楼
grandboy
2009-08-16
ximencf 写道
grandboy 写道
你这个没有启动双向认证,自然不会有选择客户端证书那个对话框弹出来。真正的双向认证,你要再做两步:
1. clientAuth="true".
2. 为你的connector设置truststore.
因为服务器要求发送客户端证书是为了做身份确认。怎么做身份确认呢?一、在服务器的truststore里查找你的证书,如果有此证书,这一步就算通过了。二、通常还有程序逻辑来判断,例如,从证书里取出一个字段(cn, email等随便一个, 这里可以叫作证书身份mapping)来作为你的系统的身份,赋予权限等。这样只要用户发送自己的证书,系统就能得知是谁来访问系统了,也就是起到了输入用户名和口令的作用。
1. clientAuth="true".
2. 为你的connector设置truststore.
因为服务器要求发送客户端证书是为了做身份确认。怎么做身份确认呢?一、在服务器的truststore里查找你的证书,如果有此证书,这一步就算通过了。二、通常还有程序逻辑来判断,例如,从证书里取出一个字段(cn, email等随便一个, 这里可以叫作证书身份mapping)来作为你的系统的身份,赋予权限等。这样只要用户发送自己的证书,系统就能得知是谁来访问系统了,也就是起到了输入用户名和口令的作用。
我现在自己做了个root证书,作为自己信任的根证书,然后 root自签名,同时制作出server端和客户端的数字证书,用root的私钥给他们分别签名。将root证书和客户端数字证书的分别导入浏览器,最后,服务器的keystore为server端的证书生成的一个keystore,您所说的truststore应该为什么呢?客户端的CA证书文件?
Xml代码
1. <Connector port="8443"
2. maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
3. enableLookups="false" disableUploadTimeout="true"
4. acceptCount="100" debug="0" scheme="https" secure="true"
5. clientAuth="true" sslProtocol="TLS"
6. keystoreFile="root.p12" keystorePass="222222" keystoreType="PKCS12"
7. truststoreFile="client.jks" truststorePass="222222" truststoreType="JKS" />
很多地方这么写,但是keystore好像就要求是jks的文件能行的,不是p12类型的。
看样子你对证书格式还是有点糊涂。 pck12是可以起到(仅仅是起到, 并不是jks, 服务器一般都是默认接受jks证书库的)jks的作用的,只不过在配置的时候需要告诉一下server你用的是p12格式的证书库,只不过这个证书库只有一个证书,同时需要提供口令,就是你如上的配置一样。也就是说直接用客户端p12文件充当trustStore是可以的,测试的时候完全可以这样做。但是在实际应用中会有些问题。如果你的服务器只发出一个p12客户端证书的时候情况就完全可以这样用,这样就是所有使用你系统的用户都用这一个pk12证书,只能证明他是合法用户,但是无法证明他是"谁"。如果你同样需要证明用户是"谁"的话(也就是你给每个用户颁发一个p12证书),那么你就还得用jks文件充当truststore. 只不过你要把pk12的信息导入到这个truststore,这样服务器就可以首先确认这个用户是合法用户,然后你就可以用程序处理证书身份mapping了。具体怎么导,看你上面的说明的你应该知道怎么做了吧,我就不说了。
6 楼
ximencf
2009-08-15
grandboy 写道
你这个没有启动双向认证,自然不会有选择客户端证书那个对话框弹出来。真正的双向认证,你要再做两步:
1. clientAuth="true".
2. 为你的connector设置truststore.
因为服务器要求发送客户端证书是为了做身份确认。怎么做身份确认呢?一、在服务器的truststore里查找你的证书,如果有此证书,这一步就算通过了。二、通常还有程序逻辑来判断,例如,从证书里取出一个字段(cn, email等随便一个, 这里可以叫作证书身份mapping)来作为你的系统的身份,赋予权限等。这样只要用户发送自己的证书,系统就能得知是谁来访问系统了,也就是起到了输入用户名和口令的作用。
1. clientAuth="true".
2. 为你的connector设置truststore.
因为服务器要求发送客户端证书是为了做身份确认。怎么做身份确认呢?一、在服务器的truststore里查找你的证书,如果有此证书,这一步就算通过了。二、通常还有程序逻辑来判断,例如,从证书里取出一个字段(cn, email等随便一个, 这里可以叫作证书身份mapping)来作为你的系统的身份,赋予权限等。这样只要用户发送自己的证书,系统就能得知是谁来访问系统了,也就是起到了输入用户名和口令的作用。
我现在自己做了个root证书,作为自己信任的根证书,然后 root自签名,同时制作出server端和客户端的数字证书,用root的私钥给他们分别签名。将root证书和客户端数字证书的分别导入浏览器,最后,服务器的keystore为server端的证书生成的一个keystore,您所说的truststore应该为什么呢?客户端的CA证书文件?
Xml代码
1. <Connector port="8443"
2. maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
3. enableLookups="false" disableUploadTimeout="true"
4. acceptCount="100" debug="0" scheme="https" secure="true"
5. clientAuth="true" sslProtocol="TLS"
6. keystoreFile="root.p12" keystorePass="222222" keystoreType="PKCS12"
7. truststoreFile="client.jks" truststorePass="222222" truststoreType="JKS" />
很多地方这么写,但是keystore好像就要求是jks的文件能行的,不是p12类型的。
5 楼
grandboy
2009-08-15
你这个没有启动双向认证,自然不会有选择客户端证书那个对话框弹出来。真正的双向认证,你要再做两步:
1. clientAuth="true".
2. 为你的connector设置truststore, 如果不设置这个,就必须要把证书导入到jre的cacerts里。
因为服务器要求发送客户端证书是为了做身份确认。怎么做身份确认呢?一、在服务器的truststore里的ca来验证你的客户端证书的有效性(当然这个浏览器就可以做了),如此证书有效,这一步就算通过了。二、通常还有程序逻辑来判断,例如,从证书里取出一个字段(cn, email等随便一个, 这里可以叫作证书身份mapping)来作为你的系统的身份,赋予权限等。这样只要用户发送自己的证书,系统就能得知是谁来访问系统了,也就是起到了输入用户名和口令的作用。
1. clientAuth="true".
2. 为你的connector设置truststore, 如果不设置这个,就必须要把证书导入到jre的cacerts里。
因为服务器要求发送客户端证书是为了做身份确认。怎么做身份确认呢?一、在服务器的truststore里的ca来验证你的客户端证书的有效性(当然这个浏览器就可以做了),如此证书有效,这一步就算通过了。二、通常还有程序逻辑来判断,例如,从证书里取出一个字段(cn, email等随便一个, 这里可以叫作证书身份mapping)来作为你的系统的身份,赋予权限等。这样只要用户发送自己的证书,系统就能得知是谁来访问系统了,也就是起到了输入用户名和口令的作用。
4 楼
daquan198163
2009-08-15
clientAuth="true"试试看什么效果,看那个图的样子应该是ie的功能吧。
3 楼
ximencf
2009-08-15
daquan198163 写道
一般不做双向验证,即只是客户端验证服务器,而服务器不去验证客户端
要clientAuth="false"为true的时候才是启动双向认证 ,这个不是重点,关键是图里面的效果是如何得到的啊?
2 楼
daquan198163
2009-08-15
一般不做双向验证,即只是客户端验证服务器,而服务器不去验证客户端
1 楼
ximencf
2009-08-15
<pre name="code" class="xml">web.xml
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/SSL/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint></pre>
<pre name="code" class="xml">tomcat
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="N:\myca\server\server_keystore"
keystorePass="changeit"
/></pre>
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/SSL/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint></pre>
<pre name="code" class="xml">tomcat
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="N:\myca\server\server_keystore"
keystorePass="changeit"
/></pre>
相关推荐
安全机制包括加密机制、数字签名机制、访问控制机制、数据完整性机制、认证交换机制、流量填充机制、路由控制机制和公证机制。加密机制是信息安全的基础,包括对称和非对称加密,以及序列和分组密码算法。数字签名...
- **拟态防御**:是一种模仿自然界生物拟态机制的安全防御策略,通过改变自身的表象或行为来迷惑攻击者,从而增强系统的安全性。 #### 新型基础设施建设的内涵与特点 - **内涵和外延**: - **信息基础设施**:...
流量填充,用于迷惑潜在攻击者,使他们难以确定真实数据量;访问控制,确保只有授权用户能访问敏感信息;身份认证,验证用户身份以防止未授权访问;数据分类,根据信息的重要性进行标记和管理;以及人员培训,教育...
因此,建立健全的法律法规,采用数字签名认证等手段来防止潜在风险变得至关重要。 对抗性攻击是AI领域的一个重要研究方向,它涉及对机器学习模型的有目的性干扰,使其产生误判。例如,Inception-v3模型遭受定向或非...
他曾经在青鸟担任过兼职,并且在不同规模的公司,包括华为、雅虎等知名企业工作过,拥有多个专业认证。他指出,青鸟学生的就业能力较强,主要学习的.NET和J2EE技术是目前市场上的主流开发工具,因此就业并不困难。但...
根据理解判断正误,特别关注敏感词汇和数字,因为这些都是命题者常设的迷惑点。 在备考策略上,不应死记硬背,而是要理论联系实际,理解性记忆。掌握教材的结构和逻辑,这样有助于全面理解和掌握知识点,形成系统的...
在IT安全领域,验证信息的真实性至关重要,比如数字签名用于验证数据完整性,身份认证确保只有授权用户可以访问系统。 5. **风险管理和决策**:狮子面临风险时做出了逃跑的决策,而狐狸在信息不完全的情况下选择...
- **安全基线说明**:口令应该具备一定的复杂度,例如包含大小写字母、数字和特殊字符的组合,以提高安全性。 - **授权** - **用IP协议进行远程维护的设备使用SSH等加密协议** - **安全基线说明**:对于需要通过...
- **身份验证**:使用多种身份验证方式,如基本认证、摘要式认证等。 - **日志记录**:开启IIS日志记录,监控异常请求。 #### 三、网站设计程序代码安全 **3.1 输入验证** - **用户输入过滤**:对所有用户提交的...
2. **检查签名和认证**:如果可能,验证文件的数字签名以确认其来源和完整性。 3. **了解内容**:在解压和使用之前,先了解zip文件内的内容,特别是“ext”文件的作用和需求。 4. **安全解压**:在沙箱环境中解压...
后门**:指在系统中预留的秘密入口,攻击者可以通过这些入口绕过常规的认证机制进入系统。 **14. 拖库**:是指攻击者从数据库中导出大量的敏感数据,通常用于进一步分析和利用这些数据进行攻击。 **15. 社工库**...
在当今的数字化时代,网络安全问题日益凸显,其中网络钓鱼攻击是一种常见的欺诈手段。本文将深入探讨“PRONOTE-CLONE-PHISHING-WEBSITE”项目,这是一个基于Node.js、JavaScript、CSS和CSS3构建的网站仿冒案例,其...
在当今数字化时代,生物识别技术在身份验证领域中变得越来越重要,因为它相较于传统的密码或令牌认证系统来说更加便捷和可靠。然而,生物识别技术的广泛应用同样伴随着一个重大挑战:个人隐私泄露和身份盗窃的风险。...
此文档包括 WinRAR 多功能综合压缩文件管理器 <br> WinRAR 功能: * WinRAR 引入了一个原创的压缩算法。它提供了比其它 PC 压缩工具更高 的压缩率,特别适用于处理可执行文件,对象库,大的文本文件...