尝试使用证书来保护 Tomcat 8.x 和 mysql/mariadb 之间的连接。我将使用自签名证书。以下是我认为我应该做的,感谢您的参与和纠正。
创建后端(数据库)证书
- sudo openssl genrsa 4096 > ca-key.pem
- sudo openssl req -new -x509 -nodes -days 3600 -key ca-key.pem -out ca-cert.pem
- sudo openssl req -newkey rsa:4096 -days 3600 -nodes -keyout server-key.pem -out server-req.pem
- sudo openssl rsa -in 服务器密钥.pem -out 服务器密钥.pem
- sudo openssl x509 -req -in 服务器-req.pem -days 3600 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 -out 服务器-cert.pem
更新 mysql cnf
- ca密钥.pem
- 服务器密钥.pem
- 服务器证书.pem
好吧,现在我不知道该怎么做了。我想我必须使用 JAVA keytool 。
我接下来要去哪里?
过氧化物酶
答案1
您描述的步骤对我来说看起来不错。不过,您不需要对 openssl 命令使用 sudo。
完成这些之后,您必须将 CA 证书导入 Java 信任存储区。它被称为“cacerts”,位于目录中<path_to_jre>/security/
。只需使用以下命令导入证书即可:
keytool -import -trustcacerts -keystore /path/to/jre/security/cacerts \
-file /path/to/ca-cert.pem -alias "some meaningful name"
keystore 文件的默认密码是“changeit”。
如果导入了,则应将useSSL=true
开关添加到 JDBC URL,使其看起来像这样:
jdbc:mysql://server/database?useUnicode=true&useSSL=true
需要考虑的一些事项:
- 您不必使用系统范围的密钥库,但如果不这样做,您必须在连接之前通过开关
-Djavax.net.ssl.trustStore=/keystore/path
或调用提供密钥库位置System.setProperty("javax.net.ssl.trustStore", "/keystore/path")
。 - 输入文件必须是 PEM 格式(即
-----BEGIN CERTIFICATE-----
和-----END CERTIFICATE-----
行之间的 base64 编码的内容)。 - 该
keytool
命令不会搜索证书:它应该是输入文件中的第一个条目。