Tomcat 服务器/客户端自签名 SSL 证书

2023-11-29

我有一个使用自签名 SSL 证书运行的 Apache Tomcat 6.x 服务器。我希望客户端向服务器提供他们自己的证书,以便我可以根据用户数据库对他们进行身份验证。我的一切都基于我在网上找到的示例,但该示例附带了预装证书和预构建的 JKS 数据存储区。我想用自己的证书创建自己的数据存储,但没有运气。

如何为 Tomcat 创建数据存储?
如何为 Tomcat 创建自签名证书?

如何为客户端创建自签名证书?
如何强制Tomcat信任客户端的签名?

我已经玩 java keytool 好几个小时了。


终于找到了我的问题的解决方案,所以如果其他人遇到困难,我会将结果发布在这里。

感谢迈克尔·马丁迈克尔的软件想法和漫谈我发现:

keytool 默认使用 DSA 生成时的算法 自签名证书。早期版本 Firefox 无需任何操作即可接受这些密钥 问题。在 Firefox 3 beta 5 中,使用 DSA 不起作用,但使用 RSA 可以。 生成时传递“-keyalg RSA” 自签名证书创建一个 完全认证 Firefox 3 beta 5 接受。

我只是设置了该标志,清除了 FireFox 中的所有缓存,它就像一个魅力!我使用它作为我的项目的测试设置,并且需要与其他人共享它,因此我编写了一个小批处理脚本来创建两个 SSL 证书。一个可以放入 Tomcat 安装程序中,另一个是可以导入到 FireFox/IE 中的 .p12 文件。谢谢!

用法:第一个命令行参数是客户端的用户名。所有密码均为“password”(不带引号)。更改任何硬编码位以满足您的需求。

@echo off
if "%1" == "" goto usage

keytool -genkeypair -alias servercert -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -keystore server.jks -storepass password
keytool -genkeypair -alias %1 -keystore %1.p12 -storetype pkcs12 -keyalg RSA -dname "CN=%1,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass password -storepass password
keytool -exportcert -alias %1 -file %1.cer -keystore %1.p12 -storetype pkcs12 -storepass password
keytool -importcert -keystore server.jks -alias %1 -file %1.cer -v -trustcacerts -noprompt -storepass password
keytool -list -v -keystore server.jks -storepass password
del %1.cer
goto end

:usage
echo Need user id as first argument: generate_keystore [username]
goto end

:end
pause

结果是两个文件。一个名为 server.jks 的文件可放入 Tomcat 中,另一个名为 {username}.p12 的文件可导入浏览器中。 server.jks 文件将客户端证书添加为可信证书。

我希望其他人发现这很有用。

这是需要添加到 Tomcat conf/sever.xml 文件中的 XML(仅在 Tomcat 6.x 上测试)

<Connector
   clientAuth="true" port="8443" minSpareThreads="5" maxSpareThreads="75"
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100" maxThreads="200"
   scheme="https" secure="true" SSLEnabled="true"
   keystoreFile="${catalina.home}/conf/server.jks"
   keystoreType="JKS" keystorePass="password"
   truststoreFile="${catalina.home}/conf/server.jks"
   truststoreType="JKS" truststorePass="password"
   SSLVerifyClient="require" SSLEngine="on" SSLVerifyDepth="2" sslProtocol="TLS"
/>

对于 Tomcat 7:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" SSLEnabled="true"
           maxThreads="200" scheme="https" secure="true"
           keystoreFile="${catalina.base}/conf/server.jks" keystorePass="password"
           clientAuth="false" sslProtocol="TLS" />    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tomcat 服务器/客户端自签名 SSL 证书 的相关文章

随机推荐

  • React Router v6.0.0-alpha.5 历史记录道具删除 - 在反应上下文之外导航

    根据React Router最新的v6 0 0 alpha 5版本 history prop已被删除 https github com ReactTraining react router releases tag v6 0 0 alpha
  • 控制台应用程序中的 WPF 表单

    我正在运行一个控制台应用程序 该应用程序加载 dll 并调用该 dll 中的方法来创建 WPF 表单 所以我只是调用 Program Execute 方法 它会完成表单的所有创建 一切反映业务进展顺利 但表格没有出现 我听说了这是因为控制台
  • 如何仅使用角度指令将元素拖放到日历中

    我正在尝试使用角度指令实现拖放日历 日历使用 ui calendar https github com angular ui ui calendar Arshaw FullCalendar 的完整 AngularJS 指令 将元素拖放到日历
  • 未绑定通配符和原始类型之间的区别

    我正在阅读有关泛型的内容 但我不明白未绑定通配符的必要性以及它与原始类型有何不同 我读这个问题但还是没有搞清楚 在里面未绑定通配符的 Java 教程页面我得到了以下两点 但我不明白第一点 如果您正在编写一个可以使用提供的功能来实现的方法Ob
  • 从 jQuery 转换为 Vue?

    我想转换以下 JavaScript 代码 a click function this find i toggleClass fa heartbeat 在 vue js 中 函数名称 像 JavaScript 测试 https jsfiddl
  • “用户线程无法利用多线程或多处理”是什么意思? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 用户线程无法利用多线程或多处理来源 维基百科 这是否意味着 CPU 无法同时有效地执行多个用户线程 这是否意味着 CPU 无法在两个或多个用户线程之间切换 例如 有两个用户线程t0和
  • 禁用提交按钮会阻止表单提交 PHP / Javascript

    我认为我遇到了一个经典问题 但到目前为止我还没有找到可行的解决方案 我有一个表单 用户单击 发送 使用 PRG 模式并进行客户端和服务器端验证 一切正常 当任何用户 假设他输入了有效的输入 在服务器脚本结束执行之前快速单击多次时 就会出现问
  • 如何在列表中实现选择排序?

    所以我有一个 txt文件如下 131 263 07 47 170 14 170 190 01 180 412 69 53 401 53 我必须读取该文件才能输出如下列表 131 kms 263 07 47 kms 170 14 170 km
  • 在java中绘制缓冲图像的直方图

    我已经加载缓冲图像并需要绘制直方图 请建议我接下来的绘图步骤 RGB 直方图 如果可以使用 jai 完成 请建议我这样做的方法 我尝试了很多 也用谷歌搜索了很多 但没有找到任何正确的解决方案 这是我加载图像的方式 请提供后续步骤 Buffe
  • 如何在Sql中创建100年的日历表[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 假设我想在表中存储数千天 如何从日历中检索它 这是一个可以在 SQL Server 中使用的通用脚本 只需修改开始和结束日期 IF EXISTS SELECT FROM info
  • 如何将子组件的验证数据(作为 formik 表单)传递给其父组件并处理父组件中的表单提交

    有没有办法将 formik 表单值从子组件传递到父组件并仅在父组件中处理表单提交 我有一个用例 我正在为餐厅构建表单 该表格将有很多字段 所以我将它们分组并创建了单独的较小的 formik 表单组件 所有子组件的验证模式 是的 都写在子组件
  • 如何在EditText上隐藏Android软键盘

    我有一个带有一些 EditText 字段和一些按钮的活动 以方便通常用于填充这些字段的操作 然而 当我们用户触摸 EditText 字段之一时 Android 软键盘会自动出现 我希望它默认保持隐藏状态 unless用户长按菜单按钮 我已经
  • iOS ttf 字体只能部分工作

    我的应用程序中需要 OpenSans 因此我导入了整个 OpenSans 其中包括 Bold ExtraBold Italic Regular Light 等 我将它们添加到 Mac 上的 Fontbook 以检查使用它们时需要使用的确切名
  • python 3.7 的张量流导入问题

    安装 python 3 7 的tensorflow后 我尝试导入它 但它给了我一个语法错误 用于安装的命令 sudo H pip3 install upgradehttps storage googleapis com tensorflow
  • C# 反射使用变量作为对象。[var]

    我正在尝试使用反射在剃刀视图中生成一个表 以从模型中提取属性 这是我尝试过的 if Model Count gt 0 System Reflection PropertyInfo properties Model First GetType
  • 一次向多个对象发送消息(objective-c)

    或用一个值设置多个对象 有没有一种方法可以在一行中向多个对象发送一条消息 So like someObject otherObject reset 就像在 LUA 脚本 我相信是 C 中一样 您可以设置多个对象 someThing othe
  • 使用 VBA 在 PowerPoint 中创建可分组表格

    通过改变
  • Python Pip 安装错误:无法找到 vcvarsall.bat。尝试了所有解决方案[重复]

    这个问题在这里已经有答案了 我尝试使用以下命令安装 Scrapy for Python 2 7 8 anaconda 2 1 0 32 位 pip install scrapy 我收到了这个错误 error Microsoft Visual
  • 根据单词组合的条件创建二进制标识符,以便在 R 中进行过滤

    大家好 我想知道这是否可能 我还在探索中 例如 我有这个数据集 Case Date Item 1 2016 03 25 Alpha 2 2016 03 25 Bravo 3 2016 03 25 Charlie 4 2016 03 25 D
  • Tomcat 服务器/客户端自签名 SSL 证书

    我有一个使用自签名 SSL 证书运行的 Apache Tomcat 6 x 服务器 我希望客户端向服务器提供他们自己的证书 以便我可以根据用户数据库对他们进行身份验证 我的一切都基于我在网上找到的示例 但该示例附带了预装证书和预构建的 JK