如何使用本地 CA 为本地服务器创建本地 SSL 证书
How to create local SSL certificate with local CA for a local server
我正在尝试使用 keytool 为我的 java servlet 应用程序 运行 在 Tomcat 9 上生成我自己的 SSL 证书。
我正在使用此脚本生成证书:
rem 1) Key-Pair Generation For Client with:
keytool -genkey -keyalg RSA -keysize 1024 -keystore C:\cert\client1ks.jks -storepass test1234 -alias client1 -keypass client1pass -dname "CN=testuser1, OU=tmdev, O=dev, L=ist, ST=tr, C=tr"
rem 2) Public Cer Exported for Client with: test1public.cer
keytool -keystore C:\cert\client1ks.jks -storepass test1234 -alias client1 -keypass client1pass -exportcert -file C:\cert\test1public.cer
rem 3) Add extracted Client Public Cer to trusted store of Server KeyStore:
keytool -keystore "C:\cert\server.jks" -storepass server1234 -import -file "C:\cert\test1public.cer" -alias trustedclient1
rem 4) Key-Pair Generation For Server with:
keytool -genkey -keyalg RSA -keysize 1024 -keystore C:\cert\server.jks -storepass server1234 -alias server1 -keypass server1pass -dname "CN=server1, OU=tmdev, O=dev, L=ist, ST=tr, C=tr"
rem 5) Server Cer Exported for Client with: test1public.cer
keytool -keystore C:\cert\server.jks -storepass server1234 -alias server1 -keypass server1pass -exportcert -file C:\cert\serverpublic.cer
rem 6) Add extracted Server Public Cer to trusted store of Client KeyStore:
keytool -keystore C:\cert\client1ks.jks -storepass test1234 -import -file C:\cert\serverpublic.cer -alias trustedserver
我在 Tomcat 配置的 server.xml 中添加了这个:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" SSLEnabled="true"
maxThreads="200" scheme="https" secure="true"
keystoreFile="C:\cert\client1ks.jks" keystorePass="test1234"
clientAuth="false" sslProtocol="TLS" />
但我的浏览器仍然显示 Your connection to this site is not secure
并带有红锁。为什么?
您所做的是使用自签名证书设置服务器的步骤。您还没有告诉客户端(浏览器)您的服务器证书。
客户端像浏览器一样,有一组默认信任的证书颁发机构 (CA) 和子 CA。默认情况下,由这些 CA/SubCA 签署的任何证书都将被客户端信任,您无需为此执行任何额外步骤。但是当您使用自签名证书或由客户端不信任的 CA 签名的证书时,您必须明确告诉客户端信任 CA 或自签名证书。
因此,为了回答您的问题,由于您使用的是自签名证书,因此您必须将此证书添加到浏览器的信任库中。您可以在浏览器设置中找到浏览器信任库(通常在安全下)。
高级设置:
您可以自己创建一个证书链来复制信任链,方法是首先创建一个自签名 CA 证书,然后您将创建一个服务器密钥对并为该密钥对创建一个 CSR,并拥有CA 签署 CSR 以颁发证书。然后,您会将此证书关联到您的服务器密钥对。在这种情况下,您只需将自签名 CA 证书添加到浏览器的信任库中。您不会添加服务器证书。这是做这件事的理想方式。您可以使用 keystore-explorer 应用程序轻松完成所有这些步骤,它具有漂亮且简单的 GUI。如果您使用这种方法,明天如果您有第二台服务器需要保护,您所要做的就是为第二台服务器生成一个密钥对,并按照与上述相同的步骤进行操作(除了将 CA 证书添加到信任库) .您现在可以在浏览器上正常启动您的第二个应用程序(您不会看到红色锁)。
安全注意事项:
您只会在开发阶段执行此操作。对于您的应用程序的生产版本,您将使用由知名 CA 签名的真实证书设置您的服务器。
我正在尝试使用 keytool 为我的 java servlet 应用程序 运行 在 Tomcat 9 上生成我自己的 SSL 证书。 我正在使用此脚本生成证书:
rem 1) Key-Pair Generation For Client with:
keytool -genkey -keyalg RSA -keysize 1024 -keystore C:\cert\client1ks.jks -storepass test1234 -alias client1 -keypass client1pass -dname "CN=testuser1, OU=tmdev, O=dev, L=ist, ST=tr, C=tr"
rem 2) Public Cer Exported for Client with: test1public.cer
keytool -keystore C:\cert\client1ks.jks -storepass test1234 -alias client1 -keypass client1pass -exportcert -file C:\cert\test1public.cer
rem 3) Add extracted Client Public Cer to trusted store of Server KeyStore:
keytool -keystore "C:\cert\server.jks" -storepass server1234 -import -file "C:\cert\test1public.cer" -alias trustedclient1
rem 4) Key-Pair Generation For Server with:
keytool -genkey -keyalg RSA -keysize 1024 -keystore C:\cert\server.jks -storepass server1234 -alias server1 -keypass server1pass -dname "CN=server1, OU=tmdev, O=dev, L=ist, ST=tr, C=tr"
rem 5) Server Cer Exported for Client with: test1public.cer
keytool -keystore C:\cert\server.jks -storepass server1234 -alias server1 -keypass server1pass -exportcert -file C:\cert\serverpublic.cer
rem 6) Add extracted Server Public Cer to trusted store of Client KeyStore:
keytool -keystore C:\cert\client1ks.jks -storepass test1234 -import -file C:\cert\serverpublic.cer -alias trustedserver
我在 Tomcat 配置的 server.xml 中添加了这个:
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" SSLEnabled="true"
maxThreads="200" scheme="https" secure="true"
keystoreFile="C:\cert\client1ks.jks" keystorePass="test1234"
clientAuth="false" sslProtocol="TLS" />
但我的浏览器仍然显示 Your connection to this site is not secure
并带有红锁。为什么?
您所做的是使用自签名证书设置服务器的步骤。您还没有告诉客户端(浏览器)您的服务器证书。
客户端像浏览器一样,有一组默认信任的证书颁发机构 (CA) 和子 CA。默认情况下,由这些 CA/SubCA 签署的任何证书都将被客户端信任,您无需为此执行任何额外步骤。但是当您使用自签名证书或由客户端不信任的 CA 签名的证书时,您必须明确告诉客户端信任 CA 或自签名证书。
因此,为了回答您的问题,由于您使用的是自签名证书,因此您必须将此证书添加到浏览器的信任库中。您可以在浏览器设置中找到浏览器信任库(通常在安全下)。
高级设置:
您可以自己创建一个证书链来复制信任链,方法是首先创建一个自签名 CA 证书,然后您将创建一个服务器密钥对并为该密钥对创建一个 CSR,并拥有CA 签署 CSR 以颁发证书。然后,您会将此证书关联到您的服务器密钥对。在这种情况下,您只需将自签名 CA 证书添加到浏览器的信任库中。您不会添加服务器证书。这是做这件事的理想方式。您可以使用 keystore-explorer 应用程序轻松完成所有这些步骤,它具有漂亮且简单的 GUI。如果您使用这种方法,明天如果您有第二台服务器需要保护,您所要做的就是为第二台服务器生成一个密钥对,并按照与上述相同的步骤进行操作(除了将 CA 证书添加到信任库) .您现在可以在浏览器上正常启动您的第二个应用程序(您不会看到红色锁)。
安全注意事项:
您只会在开发阶段执行此操作。对于您的应用程序的生产版本,您将使用由知名 CA 签名的真实证书设置您的服务器。