Red Hat服务器部署Nexus 3.0.2-02启动报错:NoSuchFieldError: CN
解决Red Hat服务器上Nexus 3.0.2-02启动时的
NoSuchFieldError: CN错误 这个问题我之前帮同行排查过,核心是Nexus自动生成节点SSL证书时,找不到JDK类库中的X500Principal.CN常量字段,导致依赖注入环节直接失败,服务启动卡壳。下面给你几个按优先级排序的解决步骤,挨个试就行:
一、先确认JDK版本兼容性
Nexus 3.0.2-02对Java版本要求很严格,早期版本对Oracle JDK 8的兼容性远优于OpenJDK:
- 先检查当前系统在用的JDK版本:
java -version - 如果是Red Hat OpenJDK 8或者Oracle JDK 8版本低于1.8.0_101,建议切换到Oracle JDK 8的稳定版本(比如1.8.0_202),配置好
JAVA_HOME和PATH环境变量后再重启Nexus。
二、手动生成SSL证书替换自动生成的证书
如果JDK版本没问题,大概率是Nexus自动生成证书的逻辑出了故障,咱们手动生成一套靠谱的证书:
- 先停掉Nexus服务:
# 进入Nexus安装目录的bin文件夹 cd /path/to/nexus-3.0.2-02/bin ./nexus stop - 找到Nexus的数据目录(默认是安装目录同级的
sonatype-work/nexus3),进入etc/ssl文件夹,删除现有无效证书:cd /path/to/sonatype-work/nexus3/etc/ssl rm keystore.jks truststore.jks - 用
keytool生成自签名证书(密码可以自定义,记好后面要用到):keytool -genkeypair -alias nexus -keyalg RSA -keysize 2048 -validity 3650 \ -keystore keystore.jks -storepass your-custom-password -keypass your-custom-password \ -dname "CN=localhost, OU=Nexus, O=Sonatype, L=Unknown, ST=Unknown, C=US" - 将生成的keystore导入到truststore,确保Nexus能信任自己的证书:
keytool -importkeystore -srckeystore keystore.jks -destkeystore truststore.jks \ -srcalias nexus -destalias nexus -srcstorepass your-custom-password \ -deststorepass your-custom-password -destkeypass your-custom-password - 修改Nexus的配置文件
sonatype-work/nexus3/etc/nexus-default.properties,让配置和你设置的密码匹配:nexus-args=${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-https.xml nexus-https-port=8443 nexus-keystore=${karaf.data}/etc/ssl/keystore.jks nexus-keystore-password=your-custom-password nexus-keystore-key-password=your-custom-password nexus-truststore=${karaf.data}/etc/ssl/truststore.jks nexus-truststore-password=your-custom-password - 重启Nexus服务:
cd /path/to/nexus-3.0.2-02/bin ./nexus start
三、终极方案:升级Nexus版本
3.0.2-02是Nexus 3系列的早期测试版本,存在大量已知bug,包括SSL证书生成的兼容性问题。如果上面的方法都无效,建议直接升级到3.x系列的稳定版本(比如3.60.x),新版本不仅修复了这类底层问题,还提升了服务性能和安全性。
内容的提问来源于stack exchange,提问作者Shalika
相关产品推荐
相关产品推荐

