Tomcat 现在只支持 JKS
或PKCS12
格式的keystores. JKS
格式是 Java 的标准 KeyStore格式,它可以用 Java 的
keytool
来产生。这个工具在 Java 的 bin 目录里。
PKCS12
格式时互联网的标准,可以用 OpenSSL 和微软的 Key-Manager来修改。
To import an existing certificate into a JKS keystore, please read the
documentation (in your JDK documentation package) about keytool
.
Note that openssl often adds a readable comments before the key,
keytool
does not support that, so remove the openssl comments
if they exist before importing the key using keytool
.
使用OpenSSL把一个现存的被你自己CA签署的认证书输入到PKCS12
keystore里面,你会执行象这样的一个命令:
| | |
| openssl pkcs12 -export -in mycert.crt -inkey mykey.key \
-out mycert.p12 -name tomcat -CAfile myCA.crt \
-caname root -chain
| |
| | |
更深层的情况,请查阅OpenSSL documententation。
要从头开始产生一个新的keystore,包含一个自签的认证书,从一个终端命令行执行下面的命令:
视窗
| | |
| %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA | |
| | |
Unix
| | |
| %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA | |
| | |
( 应该把RSA运算法则作为主要安全运算法则,这保证了与其它服务器和组件的兼容性。)
这个命令会在用户的home directory产生一个叫做" .keystore
" 的新文件。要指定一个不同的位置(location)或文件名,在上面所示的keytool
命令里添加-keystore
参数,后面紧跟着你的keystore文件的全部路径名。你还需要把
这个新的位置在server.xml
配置文件中反映出来,这在后面将有描述。例如:
视窗
| | |
| %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA \
-keystore \path\to\my\keystore | |
| | |
Unix
| | |
| %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA \
-keystore \path\to\my\keystore | |
| | |
在执行这个命令后,你首先被要求出示keystore密码。Tomcat使用的默认密码是
" changeit
"(全都是小写字母),如果你愿意,你可以指定你自己的
密码。你还需要在server.xml
配置文件里指定自己的密码,这在以后会有描述。
下一步,你会被要求出示关于这个认证书的一般性信息,如公司,联系人名称,等等。这些信息会
显示给那些试图访问你程序里安全网页的用户,以确保这里提供的信息与他们期望的相对应。
最后,你会被要求出示密钥(key)密码,也就是这个认证书所特有的密码(与其它的
储存在同一个keystore文件里的认证书不同)。你必须在这里使用与keystore
密码相同的密码。(目前,keytool
会提示你按ENTER键会自动帮你做这些)。
如果一切顺利,你现在就拥有了一个可以被你的服务器使用的有认证书的keystore文件。
注意: 你的 private key 的密码和 keystore 的密码应该相同。
如果不同的话你会得到一下错误信息: java.io.IOException: Cannot recover key
这是一个已知的错误,详细请看:
Bugzilla issue 38217