1. maven ssl 配置基础
首先从一个常见的错误说起。
当使用mvn
打包时,会报错:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target -> [Help 1]
问题原因是没有导入中心仓域名的证书,ssl
证书校验不通过,就会报错误。
此时有两种方式处理:
- 配置
ssl
证书,见文档; - 配置忽略
ssl
证书,见下文;
如何配置忽略ssl校验:
示例:
mvn -X clean install -Dmaven.resolver.transport=wagon -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true
参数解析:
-Dmaven.wagon.http.ssl.insecure=true
:启用对ssl
验证的宽松检查。
-Dmaven.wagon.http.ssl.allowall=true
:允许使用服务的带hostname
的X.509
格式的证书。如果讲参数改为false,那么就会使用长默认的浏览器证书检查。
-Dmaven.wagon.http.ssl.ignore.validity.dates=true
:忽略整数中日期的检查。
Dmaven.resolver.transport=wagon
:在Maven3.9.0或者更高的版本中,默认的http调用已经切换到了Apache HttpClient 4
。需要切换成旧的wagon
组件,否则前面的三个参数不会生效。
参考:
[1] Guide to Remote repository access through authenticated HTTPS
[2] Maven Wagon HTTP
2. idea配置 maven https
idea配置maven默认不进行https校验
idea配置maven https忽略ssl:
Build,Execution.Deployment
--> Build Tools --> Maven --> Importing : VM options for importer 增加1中忽略ssl校验的实例;Build,Execution.Deployment
--> Build Tools --> Maven --> Runner: VM Options 增加1中忽略ssl校验的实例;
maven Runner
是在执行goals
时自动添加的。
maven Importing
时idea引入依赖时的操作,此时并没有执行goals
。
每个项目需要单独配置。
参考:
[1] idea配置文档
3. 补充知识
当前TLS为主流
3.1 HTTPS 超文本传输安全协议
超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。这个协议由网景公司(Netscape)在1994年首次提出,随后扩展到互联网上。
历史上,HTTPS连接经常用于万维网上的交易支付和企业信息系统中敏感信息的传输。在2000年代末至2010年代初,HTTPS开始广泛使用,以确保各类型的网页真实,保护账户和保持用户通信,身份和网络浏览的私密性。
另外,还有一种安全超文本传输协议(S-HTTP)的HTTP安全传输实现,但是HTTPS的广泛应用而成为事实上的HTTP安全传输实现,S-HTTP并没有得到广泛支持。
网景在1994年创建了HTTPS,并应用在网景导航者浏览器中。 最初,HTTPS是与SSL一起使用的;在SSL逐渐演变到TLS时,HTTPS也由在2000年五月公布的RFC 2818正式确定下来。
特点:
https://
开头,默认端口443,安全连接;- 对比
http
协议以http://
开头,默认端口80,不安全连接,可以通过监听喝中间人攻击手段窃取敏感信息;
- 对比
- 服务器设置:要使一网络服务器准备好接受HTTPS连接,管理员必须创建一数字证书,并交由证书颁发机构签名以使浏览器接受。证书颁发机构会验证数字证书持有人和其声明的为同一人。浏览器通常都预装了证书颁发机构的证书,所以他们可以验证该签名;
- 获得证书:
- 由证书颁发机构签发的证书有免费的,也有每年收费数美元到数千美元不等的;
- 一个组织也可能有自己的证书颁发机构,尤其是当设置浏览器来访问他们自己的网站时(如,运行在公司或学校局域网内的网站)。他们可以容易地将自己的证书加入浏览器中;
- 访问控制:
- HTTPS也可被用作客户端认证手段来将一些信息限制给合法的用户。要做到这样,管理员通常会给每个用户创建证书(通常包含了用户的名字和电子邮件地址)。这个证书会被放置在浏览器中,并在每次连接到服务器时由服务器检查。
- 当私钥失密时:证书可在其过期前被吊销,通常情况是该证书的私钥已经失密。通常由浏览器进行处理,浏览器将网站提供的证书的序列号通过OCSP发送给证书颁发机构,后者会告诉浏览器证书是否还是有效的。
局限:
- 协议所能提供的保护总强烈地依赖于浏览器的实现和服务器软件所支持的加密算法;
- HTTPS不能防爬虫;
- TLS1.2中服务端发送的证书以明文传输,可以ISP黑名单拦截,导致TLS无法创建。TLS1.31服务端证书被加密,但是服务器名称指示依然没有加密,仍然会被拦截;
参考:
[1] HTTPS WIKI
[2] SNI WIKI
3.2 SNI 服务器名称指示
服务器名称指示(英语:Server Name Indication,缩写:SNI)是TLS的一个扩展协议,在该协议下,在握手过程开始时客户端告诉它正在连接的服务器要连接的主机名称。这允许服务器在相同的IP地址和TCP端口号上呈现多个证书,并且因此允许在相同的IP地址上提供多个安全(HTTPS)网站(或其他任何基于TLS的服务),而不需要所有这些站点使用相同的证书。它与HTTP/1.1基于名称的虚拟主机的概念相同,但是用于HTTPS。
为了使SNI协议起作用,绝大多数访问者必须使用实现它的Web浏览器。使用未实现SNI浏览器的用户将被提供默认证书,因此很可能会收到证书警告。
3.3 TLS 传输层安全性协议
传输层安全性协议(英语:Transport Layer Security,缩写:TLS)前身称为安全套接层(英语:Secure Sockets Layer,缩写:SSL)是一种安全协议,目的是为互联网通信提供安全及数据完整性保障。
参考:
[1] TLS WIKI
3.4 x.509标准
X.509是密码学里公钥证书的格式标准。X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。
X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。