จะบอกให้ Maven เพิกเฉยต่อข้อผิดพลาด SSL ได้อย่างไร (และเชื่อถือใบรับรองทั้งหมด)


106

ฉันต้องเรียกใช้คำสั่ง "mvn" บ่อยๆ:

mvn -f pom.xml clean install -Dmaven.test.skip=false --settings /Users/myhome/settings.xml -X -Djavax.net.ssl.trustStore=/Users/myhome/truststore.jks -Djavax.net.ssl.trustStoreType=JKS -Djavax.net.ssl.trustStorePassword=dummy -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -U

เนื่องจากฉันจำเป็นต้องผสานรวมกับโดเมนอื่น ๆ ดังนั้นในปัจจุบันทุกครั้งที่ฉันต้องเพิ่มใบรับรองลงใน truststore.jks ของฉันเพื่อป้องกันข้อผิดพลาดในการจับมือ SSL

มีวิธีใดบ้างที่ฉันสามารถกำหนดค่า mvn เพื่อละเว้นข้อผิดพลาด SSL

คำตอบ:


237

คุณสามารถปิดใช้งานการตรวจสอบใบรับรอง SSL โดยการเพิ่มพารามิเตอร์บรรทัดคำสั่งเหล่านี้อย่างน้อยหนึ่งพารามิเตอร์:

  • -Dmaven.wagon.http.ssl.insecure=true - เปิดใช้งานการตรวจสอบ SSL แบบผ่อนคลายสำหรับใบรับรองที่ผู้ใช้สร้างขึ้น
  • -Dmaven.wagon.http.ssl.allowall=true- เปิดใช้งานการจับคู่ใบรับรอง X.509 ของเซิร์ฟเวอร์กับชื่อโฮสต์ หากปิดใช้งานเบราว์เซอร์เช่นเช็คจะถูกใช้
  • -Dmaven.wagon.http.ssl.ignore.validity.dates=true - ละเว้นปัญหาเกี่ยวกับวันที่ใบรับรอง

เอกสารอย่างเป็นทางการ: http://maven.apache.org/wagon/wagon-providers/wagon-http/

นี่คือ oneliner สำหรับการคัดลอกและวางที่ง่ายดาย:

-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true

Ajay Gautamแนะนำว่าคุณสามารถเพิ่มด้านบนลงใน~/.mavenrcไฟล์ได้เช่นกันโดยไม่ต้องระบุทุกครั้งที่บรรทัดคำสั่ง:

$ cat ~/.mavenrc 
MAVEN_OPTS="-Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true"

1
ฉันมีโครงการ spring boot / maven และฉันใช้ maven-jaxb2-plugin เพื่อสร้างแหล่งที่มาของบริการเว็บ แต่ใบรับรองหมดอายุ ดังนั้นฉันจึงลองเรียกใช้ maven สร้างซอร์สด้วย agruments ข้างต้นใน Eclipse แต่ฉันยังคงได้รับข้อผิดพลาด "การตรวจสอบการประทับเวลาล้มเหลว" ความคิดใด ๆ ที่จะแก้ปัญหาในสภาพแวดล้อม eclipse / maven
Mukun

14
คำตอบไม่ได้ผลสำหรับฉัน ฉันใช้ maven 3.5.0 และข้อยกเว้นที่ฉันได้รับคือPKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target. รถบรรทุกทำงานร่วมกับ MAven 3.5.0 ได้หรือไม่
thlim

แต่ฉันสร้าง truststore jks และชี้ maven ไปที่ไฟล์ jks นี้
thlim

3
ด้วยการติดตั้ง Java Cryptography Extension (JCE) Unlimited Strength (สำหรับJDK7 | สำหรับJDK8 ) แก้ไขปัญหาให้ฉันบน maven 3.5.0
skadya

1
การใช้ netbeans 6.8 ฉันได้เพิ่มตัวเลือกให้กับตัวเลือก netbeans maven ภายใต้ 'Global Execution Options' ผ่าน UI และฉันสามารถดาวน์โหลดจากที่เก็บโดยใช้ https
Dan675

46

อีกทางเลือกหนึ่งที่ได้ผลสำหรับฉันคือบอกให้ Maven ใช้ http: แทน https: เมื่อใช้ Maven Central โดยเพิ่มสิ่งต่อไปนี้ในsettings.xml :

<settings>
   .
   .
   .
  <mirrors>
    <mirror>
        <id>central-no-ssl</id>
        <name>Central without ssl</name>
        <url>http://repo.maven.apache.org/maven2</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
  </mirrors>
   .
   .
   .
</settings>

ระยะทางของคุณอาจแตกต่างกันไป


2
ขอบคุณที่ได้ผล! และโปรดทราบว่าให้เปลี่ยนกลับเมื่อ SSL ทำงานได้เนื่องจากอาจทำให้ผู้ใช้เพิ่มที่เก็บที่ไม่ได้มาตรฐานซึ่งสามารถโฮสต์ได้ว่าใครรู้อะไรบ้าง
asgs

3
สิ่งนี้ใช้ไม่ได้ตั้งแต่ ม.ค. 2020 เนื่องจาก Maven repo ปิดใช้งานการเชื่อมต่อ http
Justin

1
จะได้รับข้อผิดพลาดนี้ตั้งแต่ ม.ค. 2020: ReasonPhrase: ต้องใช้ HTTPS "เนื่องจาก Maven repo ปิดใช้งานการเชื่อมต่อ Http
Justin

8

สร้างโฟลเดอร์${USER_HOME}/.mvn และวางไฟล์ที่เรียกว่าmaven.configอยู่ในนั้น

เนื้อหาควรเป็น:

-Dmaven.wagon.http.ssl.insecure=true
-Dmaven.wagon.http.ssl.allowall=true
-Dmaven.wagon.http.ssl.ignore.validity.dates=true

หวังว่านี่จะช่วยได้


ฉันประสบความสำเร็จในการใช้พารามิเตอร์เหล่านั้นโดยตรงในบรรทัดคำสั่ง แต่ก็ยังล้มเหลวเมื่อเพิ่มลงในไฟล์
จัสติน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.