• 在 Apache Tomcat 中配置双向 SSL


    环境

    • Red Hat Enterprise Linux (RHEL)
      • 6.x
      • 7.x
    • 红帽企业 Web 服务器 (EWS)
      • 2.x
    • 红帽 JBoss Web Server (JWS)
      • 3.x
      • 5.x
    • 阿帕奇雄猫
      • 6.x
      • 7.x
      • 8.x
      • 9.x

    问题

    • 在服务器和客户端中设置 ssl
    • 如何要求客户端身份验证以及服务器身份验证?

    解决方案

    首先,按照 如何在 Tomcat 上设置 SSL 中的说明配置服务器。

    在服务器使用 SSL 后,使用 certificateVerification="required" 参数:

    Java Keystore

    Raw

    1. <Connector port="8443" minProcessors="5" maxProcessors="75" enableLookups="true"
    2. protocol="org.apache.coyote.http11.Http11Protocol"
    3. disableUploadTimeout="true" acceptCount="100" debug="0" scheme="https" secure="true"
    4. SSLEnabled="true" clientAuth="true" sslProtocol="TLS"
    5. keystoreFile="/full/path/to/tomcat.keystore" keystorePass="keystore_password" />

    APR 连接器

    Raw

    1. <Connector port="8443" maxThreads="200" scheme="https" secure="true" SSLEnabled="true"
    2. protocol="org.apache.coyote.http11.Http11AprProtocol"
    3. SSLCertificateFile="/usr/local/ssl/server.crt"
    4. SSLCertificateKeyFile="/usr/local/ssl/server.key"
    5. clientAuth="required" SSLProtocol="TLSv1"/>

    现在需要将服务器的公共证书安装到客户端的密钥库中,反之亦然,允许客户端和服务器在建立安全连接时正确地相互认证和信任:

    Raw

    1. # Export the Client’s Public Certificate and Import it in to the Server’s Keystore
    2. keytool -exportcert -alias {YourClientKeyAlias} -file {/path/to/your/Client/Certificate}.cer -keystore {YourClientKeystore}.jks -storepass {ChangeThis}
    3. keytool -importcert -keystore {YourServerKeystore}.jks -alias {YourClientCertAlias} -file {/path/to/your/Client/Certificate}.cer -storepass {ChangeThis} -noprompt
    4. # view the contents of the keystore (use -v for verbose output)
    5. keytool -list -keystore YourServerKeystore.jks -storepass {ChangeThis}
    6. # Export the Server’s Public Certificate and Import it in to the Client’s Keystore
    7. keytool -exportcert -alias {YourServerKeyAlias} -file {/path/to/your/Server/Certificate}.cer -keystore {YourServerKeystore.jks} -storepass {ChangeThis}
    8. keytool -importcert -keystore {YourClientKeystore}.jks -alias {YourServerCertAlias} -file {/path/to/your/Server/Certificate}.cer -storepass {ChangeThis} -noprompt
    9. # view the contents of the keystore (use -v for verbose output)
    10. keytool -list -keystore {YourClientKeystore}.jks -storepass {ChangeThis}
    11. keytool -importcert -keystore server.jks -alias clientcert -file client-public.cer -storepass ChangeThis! -noprompt
    12. # view the contents of the keystore (use -v for verbose output)
    13. keytool -list -keystore server.jks -storepass password

    诊断步骤

    您可以使用以下命令测试服务器的双向 SSL:

    Raw

    $ openssl s_client -connect TomcatHostnameOrIp:8443 -CAfile ServerCertificate.crt -cert ClientCertificate.crt -key ClientKeystore.key
    

    响应应为成功的 GET,如下所示:

    Raw

    1. GET /application/ HTTP/1.1
    2. Host:TomcatHostnameOrIp
  • 相关阅读:
    TCP与应用层协议
    查看显存和内存大小
    Postgresql的一个bug_涉及归档和pg_wal
    【LINUX】退出码和文件
    【面试:并发篇32:cas】原子类型
    深入了解JVM调优:解锁Java应用程序性能的秘诀
    Golang 结构化日志包 log/slog 详解(四):分组、上下文和属性值类型
    数据库系统概论 --- 期末单元集
    第3章 Spring Boot进阶,开发社区核心功能(上)
    Regular surface in Rn and Inverse image of a regular value
  • 原文地址:https://blog.csdn.net/allway2/article/details/126571806