SSL/STL是什么?怎么工作的?Keystore 和 Truststore是什么?

安全套接字层(Secure Sockets Layer),也称为 SSL,是一种加密协议(encryption protocol),可在 Internet 上的设备之间创建身份验证的通道(authenticated channel),以便可以安全地共享信息。本质上,SSL 将“s”放在以“https://”开头的 URL 中,这意味着您与服务器之间的连接是安全的。

SSL 一直是网站的安全标准,直到 1999 年,更新的协议传输层安全 (TLS) 取代了它。尽管现代网站实际上使用了 TLS,但 SSL 仍然是一个广泛使用的术语,并且经常看到同时称为 SSL/TLS 的技术。

SSL/TLS 是您的数据在互联网上安全传输当中的一个关键部分。

SSL 如何工作?

SSL 提供了对通道和在线传输的数据进行加密所必需的元素。该协议通过称为“SSL Handshake”的过程在浏览器和 Web 服务器之间建立专用连接。

SSL 握手使用三个密钥(key)来建立私有连接(private connection):私有密钥(private key)、公共密钥(public key)和会话密钥(session key)。如果数据是用私钥加密的,那么只有公钥才能解密。另一方面,私钥是唯一可以解密用公钥加密的信息的东西。

在 SSL 握手期间使用私钥和公钥来创建将加密所有传输数据的安全会话密钥。有关分步细分,请查看以下过程。

SSL 握手的 6 个步骤:

  1. Web 浏览器(即客户端)连接到受 SSL 保护的网站(即 SSL 服务器)并请求该网站识别自己。这被称为“client hello”。
  2. 为了识别自己,网站会发送其 SSL 证书的副本和网站的公钥。此响应称为“server hello”。
  3. 然后,客户端根据证书颁发机构 (CA) 列表检查证书,并确保证书没有过期或被吊销。
  4. 如果证书是真实的,客户端将信任它并使用网站的公钥创建对称会话密钥(symmetric session key)
  5. 然后,SSL 服务器使用私钥解密会话密钥并发送加密确认以启动会话。
  6. 网站和浏览器之间传输的所有数据都使用会话密钥加密

尽管有各种不同的步骤,但 SSL 握手实际上是瞬间发生的,网站访问者不会注意到该过程。

SSL的重要性?

如果没有 SSL,如果您在线共享社会安全号码等机密信息,该信息将使用纯文本进行交换。由于纯文本(plain text)不安全,您的信息容易受到黑客和网络罪犯的攻击,他们可能会试图拦截和使用您的数据。

每当您进行在线支付或共享个人信息(如信用卡号)时,SSL 可确保您的数据保密。因此,它是在网站与其访问者之间建立信任的关键部分。

它还有助于网站遵守以下信息安全标准:

  • 身份验证(Authentication):验证网站服务器是正确的服务器
  • 加密(Encryption):保持数据传输的私密性和受保护
  • 完整性(Integrity):确认请求或传输的数据已实际交付

什么是 SSL 证书?

与护照或身份证passport or ID card)类似,SSL/TLS 证书可验证网站或应用程序是否确实如他们所声称的那样,并且它们由网站的服务器存储。

此外,SSL 证书还包含在 SSL 握手期间用于创建安全连接的私钥和公钥。没有 SSL 证书,您的网站就无法启用 SSL 协议。

如何获取 SSL 证书

按照下面概述的步骤了解如何为您的网站获取 SSL/TLS 证书。

1. 创建密钥和证书签名请求 (CSR:Certificate Signing Reques)


获取 SSL/TLS 证书的第一步是在您的服务器上生成一对私钥和公钥。然后,您将在您网站的服务器上创建证书签名请求。

CSR 是一种编码数据文件,用作与证书颁发机构共享您的公钥和任何识别公司信息的标准化方法。

关于 CSR 的常见信息:

  • 公司名称和通用名称
  • 公司所在地
  • 钥匙类型和尺寸

2. 将 CSR 数据文件发送到证书颁发机构 (CACertificate Authority)


获得 CSR 后,您需要将加密的数据文件提交给 CA 以获得证书。为此,您需要选择一个受到网络浏览器(如 DigiCert 或 SSL.com)公开信任的 CA。

此外,您还需要确定是否可以使用标准的免费证书,或者是否需要为自定义证书付费。保险或金融等受监管行业对可能需要定制的 SSL 证书有特定要求。

在确定受信任的 CA 和您需要的证书类型后,您可以发送 CSR 文件。然后 CA 将向您发送您的 SSL/TLS 证书。

3. 在您的服务器上安装 SSL 证书


现在您已经有了 SSL/TLS 证书,您需要将它安装在您的 Web 服务器上。您还需要安装一个中间证书,它通过将证书链接到 CA 的根证书来确认证书的真实性。

按照服务器的说明安装和测试您的证书。安装后,您的网站所连接的任何浏览器都会让用户知道您的网站是安全且值得信赖的。

如何判断网站是否使用 SSL 安全


有几种方法可以判断您使用的网站是否受 SSL 保护。您需要做的就是快速浏览 URL 栏以了解您需要了解的内容。下面我们详细介绍表明网站安全的两个标志。

URL 以“https://”而不是“http://”开头

 “https://”中的“s”代表安全连接并确认该网站已通过 SSL 加密。

2. 安全网址旁边有一个挂锁图标

根据您的浏览器,挂锁图标将出现在您的 URL 的左侧或右侧。例如,如果您使用 Google Chrome,挂锁应该位于左侧。

3. Bonus:验证网站的 SSL 证书是否有效


SSL 证书已过期的网站实际上不会有安全连接,但它可能仍然有一个以“https://”开头的 URL,并且还可能显示一个挂锁。

单击 URL 栏中的挂锁以获取更多信息,检查证书是否仍然有效以及您的连接是否安全。如果一个网站没有将他们的身份放在他们的证书上,这是一个危险信号,你不应该与他们分享你的个人信息。


TLS 与 SSL:有什么区别?


作为 SSL 的后继者,TLS 是作为 SSL 技术的更新而创建的,并被赋予了不同的名称。它们本质上是相似的协议,都使用加密来保护用户在线数据的私密性。

话虽如此,与最新的 TLS 版本 (TLS 1.3) 相比,SSL 已经过时,并且被现代 Web 浏览器认为是不安全的。尽管 TLS 是当今用于保护网站的最新技术,但 SSL 一词仍然广为人知和使用。

SSL 与 TLS : 异同

Secure Sockets Layer (SSL)Transport Layer Security (TLS)
Versions and dates released- SSL 1.0 (never publicly released)
- SSL 2.0 (1995)
- SSL 3.0 (1996)
- TLS 1.0 (1999)
- TLS 1.1 (2006)
- TLS 1.2 (2008)
- TLS 1.3 (2018)
Major cryptographic differenceUses a port to make connections (i.e., an explicit connection)Uses a protocol to make connections (i.e., an implicit connection)


要点:虽然 TLS 取代了 SSL 技术,但这些术语通常可以互换使用。

SSL/TLS 是保护在线数据的重要防线。它在网站和服务器之间建立安全连接,并使所有传输的信息加密和保密。

What is a CSR (Certificate Signing Request)?

What is a CSR? A CSR or Certificate Signing request is a block of encoded text that is given to a Certificate Authority when applying for an SSL Certificate. It is usually generated on the server where the certificate will be installed and contains information that will be included in the certificate such as the organization name, common name (domain name), locality, and country. It also contains the public key that will be included in the certificate. A private key is usually created at the same time that you create the CSR, making a key pair. A CSR is generally encoded using ASN.1 according to the PKCS #10 specification.

certificate authority will use a CSR to create your SSL certificate, but it does not need your private key. You need to keep your private key secret. The certificate created with a particular CSR will only work with the private key that was generated with it. So if you lose the private key, the certificate will no longer work


什么是CSR? CSR 或证书签名请求是在申请 SSL 证书时提供给证书颁发机构的编码文本块。它通常在将安装证书的服务器上生成,并包含将包含在证书中的信息,例如组织名称、通用名称(域名)、地区和国家/地区。它还包含将包含在证书中的公钥。私钥通常在您创建 CSR 的同时创建,形成密钥对。 CSR 通常根据 PKCS #10 规范使用 ASN.1 进行编码。

证书颁发机构将使用 CSR 来创建您的 SSL 证书,但不需要您的私钥。您需要保密您的私钥。使用特定 CSR 创建的证书仅适用于使用它生成的私钥。所以如果你丢失了私钥,证书将不再有效

参考资料

What is a CSR (Certificate Signing Request)?

The Most Common OpenSSL Commands

SSL Keystore 和 Truststore

Mobile Security Access Server supports an SSL keystore and SSL truststore. The SSL keystore holds the identity key for the server and the SSL truststore serves as the repository for trusted certificates. The SSL truststore is used for trusting or authenticating client certificates (for two-way SSL).

移动安全访问服务器支持 SSL keystore 和 SSL truststore。 SSL keystore 保存服务器的身份密钥(identity key),SSL truststore 充当受信任证书的存储库。 SSL truststore用于信任或验证客户端证书(对于双向 SSL)。

you can import keys into the SSL keystore, or generate keys. You can also import certificates into the SSL truststore

您可以将密钥导入 SSL keystore,或生成密钥。您还可以将证书导入 SSL truststore

查看keyStore 和 TrustStore的命令

1. 查看keystore里面的内容

keytool -list -keystore SSLTrust.jks -storetype JCEKS -storepass "password"

结果

Keystore type: JCEKS
Keystore provider: SunJCE

Your keystore contains 13 entries

xxxx, Feb 25, 2021, trustedCertEntry, 
Certificate fingerprint (SHA-256): xxxxx

或者

Keystore type: JCEKS
Keystore provider: SunJCE

Your keystore contains 1 entry

server, Aug 4, 2022, PrivateKeyEntry, 

下载证书

如果你下载维基百科的证书,下载的证书如下,里面最重要的部分是公共密码。

下载时你可以选择不同格式保存,比如crt。下载后,如果你用文本直接打开,会出现如下:

-----BEGIN CERTIFICATE-----
XXXXX.....
-----END CERTIFICATE-----

里面的内容是可以按照一定规则读取的出来的。 

查看里面证书里面有哪些Subject

openssl crl2pkcs7 -nocrl -certfile xxx.crt|openssl pkcs7 -print_certs -text -noout |grep Subjec

根据xxx.crt证书生成trustStore

keytool -import -file xxx.crt -alias firstCA -keystore myTrustStore

curl 命令使用证书

curl https://xxx --cacert yourCertification

其它

1.生成Keystore, CSR, and the Signed Certificate的步骤

1.1.利用keytool创建keystore

在创建 Java 密钥库时,我们将首先使用 keytool 实用程序创建最初仅包含私钥的 .jks 文件。

keytool -genkey -keystore keystore.jks -alias ssl -keyalg RSA -sigalg SHA256withRSA -validity 365 -keysize 2048
  • -alias 是一个选项,用于为您的密钥输入提及别名
  • -keyalg 指定用于生成密钥对的算法
  • -keysize 指定要生成的每个密钥的大小
  • -sigalg 指定用于签署自签名证书的算法;该算法必须与 keyalg 兼容。
  • -validity 指定要创建的密钥库的有效性。

之后,会生成keystore.jks

使用以下命令列出密钥库中的条目以查看内容。我们将能够看到输入的值反映在 keystore.jks 文件的私钥条目上。

keytool -list -v -keystore keystore.jks

1.2. 从KeyStore生成 CSR(证书签名请求)

从创建的keystore创建证书签名请求 (CSR) 以与证书颁发机构 (CA) 共享以签署和生成主/服务器证书。

keytool -certreq -alias ssl -keystore keystore.jks -file javaappperfomance.csr

我们需要输入正确的别名和密码,这是我们在创建密钥库时提到的以提取证书请求。

用less命令打开javaappperformance.csr 

1.3 从证书颁发机构生成签名的主/服务器证书


将生成的 CSR 提交给 SSL 社区支持的任何 CA,以获得签名的主/服务器证书。将根据组织或您的人员选择来选择 CA。

以下是世界十大证书颁发机构的列表(根据维基百科):

RankIssuer
1Comodo
2IdenTrust
3Symantec
.......

1.4. 将Primary/Server Certificate, Root, and Intermediate CA 证书导入keystore


CA 签署证书并与我们共享后,我们需要将证书导入到我们创建的私钥条目的keystore中。

以下 keytool 命令可用于将签名证书导入密钥库;我们应该使用与私钥条目上的别名相同的别名。

keytool -import -alias ssl -keystore keystore.jks -file javaappperfomance.crt 
keytool -import -trustcacerts -alias ssl -file javaappperfomance.crt -keystore keystore.jks

1.5. 将根或中间 CA 证书导入现有的 Java 密钥库

keytool -import -trustcacerts -alias root -file entrust.cer -keystore keystore.jks

​​​​​​ddqi​​​​​​q​​​​​​​How to Generate a Keystore and CSR Using the Keytool Command - DZone

2. PKCS 12 

PKCS #12 定义了一种归档文件格式,用于实现存储许多加密对象在一个单独的文件中。通常用它来打包一个私钥及有关的 X.509 证书,或者打包信任链的全部项目。
一个 PKCS #12 文件通常是被加密的,同时单独存在。其被称作“安全包裹”的内部存储容器通常同时也被加密及单独存在。一些安全包裹被预先定义用来存储证书,私钥以及证书吊销列表。根据不同实现者的选择,也可以使用一些安全包裹存储其他任意数据。 
PKCS 是的Public-Key Cryptography Standards (PKCS) 缩写。
PKCS #12 文件扩展名为 ".p12 "或者 ".pfx"。
这些文件可以通过使用 OpenSSL pkcs12 命令被创建、解析并读出

The .p12 contains both the private and the public key, and also information about the owner (name, email address, etc. ) all being certified by a third party. With such certificate, a user can identify himself and authenticate himself to any organization trusting the third party.

.p12 包含私钥和公钥,以及有关所有者的信息(姓名、电子邮件地址等),所有这些都由第三方认证。有了这样的证书,用户就可以证明自己的身份,并向任何信任第三方的组织证明自己的身份。

运行下面命令查看

openssl pkcs12 -nodes -in <your certification>

运行结果如下:

Enter Import Password:
MAC verified OK
Bag Attributes
    localKeyID: 4A 21 25 53 55 78 D2 4E D6 A2 26 A5 EB 57 68 38 D0 6B C6 81 
subject=/C=US/O=xxx Inc./OU=34555/OU=34555/CN=xxx
issuer=/C=US/O=xxx Inc./CN=xx
-----BEGIN CERTIFICATE-----
 here is public key
-----END CERTIFICATE-----
Bag Attributes
    localKeyID: 4A 21 25 53 55 78 D2 4E D6 A2 26 A5 EB 57 68 38 D0 6B C6 81 
Key Attributes: <No Attributes>
-----BEGIN PRIVATE KEY-----
here is private key
-----END PRIVATE KEY-----

有下面的注解就说明你的文件里包含私钥

-----BEGIN PRIVATE KEY-----
here is private key
-----END PRIVATE KEY-----

总结

一般后缀是.p12的文件里既包含私钥也包含证书。

3.  Publicly-trusted certificates, Privately-trusted certificates 和 Self-Signed Certificate 是什么?

Publicly-trusted 证书
公开信任的 SSL/TLS 证书用于面向公众的 Web 服务器和应用程序。公共信任的证书只能由验证域所有者的外部可信第三方 CA(例如 Entrust、DigiCert 等)颁发。

Privately-trusted 证书
私人信任的 SSL/TLS 证书用于对内部网络上的用户和设备进行身份验证。私人信任的证书可以由公共 CA 颁发,或者更常见的是,由运行自己的专用内部公钥基础结构(例如 Microsoft CA)的任何组织颁发。

self-signed certificate (自签名证书)
另一种策略是颁发自签名 SSL 证书。自签名证书是根本没有由 CA 签名的证书——既不是私有的也不是公共的。在这种情况下,证书是用自己的私钥签名的,而不是从公共或私有 CA 请求的。

自签名证书在内部网络和软件开发阶段使用时具有一些优势,但是,如果没有适当的可见性和控制,它们也会带来一些风险。

创建自签名证书的命令

keytool -genkey -keyalg RSA -alias selfsigned -keystore selfsigned_keystore.jks -storepass changeit -validity 360 -keysize 2048

导出证书

keytool -export -alias "selfsigned" -keystore "selfsigned_keystore.jks" -storepass "changeit" -file "mycertfile.cer"

4. 问题总结

4.1 java.security.cert.CertificateException: No subject alternative DNS name matching <hostname> found

“java.security.cert.CertificateException: No subject alternative names present” 当您尝试通过 SSL 建立安全连接并且您尝试连接的主机名与服务器的 SSL 证书相比无效时,将抛出异常.

当服务器证书具有主题备用名称 (SAN) 时,请求的家庭名称必须与其中一个 SAN 匹配。如果服务器的 SSL 证书没有 SAN,则请求的家庭名称必须与证书的通用名称 (CN) 匹配。

比如下面图片显示的就是SAN,你访问的域名必须匹配下面其中一个。

5 查看已安装证书

Window 上,

Select Run from the Start menu, and then enter certmgr.msc.

Linux 上,运行下面命令

trust list

How to: View certificates with the MMC snap-in - WCF | Microsoft Learn

参考文献

Difference Between Java Keystore and Truststore | Baeldung

Configuring the SSL Keystore and Truststore

What Is SSL? How It Works and Why It's Important - Panda Security

https://docs.oracle.com/cd/E52734_01/omss/AMSAS/msas-config-ssl.htm#AMSAS11905

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茫茫人海一粒沙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值