Jira Data Center 是 Atlassian 面向企业自托管场景提供的项目、需求、缺陷、流程和敏捷研发管理平台。企业部署 Jira 后,通常需要接入现有 LDAP 用户目录和统一单点登录平台。
推荐身份架构:
1 2 3 OpenLDAP:保存人员、用户组和账号状态 Apereo CAS:使用 LDAP 验证用户,并提供 SAML 2.0 IdP Jira Data Center:通过 LDAP 获取用户与组,通过原生 SAML SSO 接入 CAS
这里必须先说明两个边界:
Jira Data Center 原生支持 LDAP 用户目录;
Jira Data Center 原生企业 SSO 是 SAML/OIDC,不原生支持 CAS Protocol。
因此生产推荐路线不是修改 Jira Tomcat Filter 强接 CAS,而是:
1 2 CAS 开启 SAML IdP -> Jira 使用 Data Center 内置 SAML SSO
第三方 CAS Marketplace App 可以作为备选,但必须确认与 Jira 11.3、Java 21 和当前 Data Center 许可证兼容,并接受插件升级和供应商支持风险。
Jira Server 已结束支持。本文使用 Jira Data Center 11.3 作为版本基线,需要有效 Data Center License。Jira 11.3 使用 Java 21,Jira 10 起 Linux 生产安装采用官方 tar.gz 手工安装方式。Rocky Linux 并非 Atlassian 文档中逐项测试的主要发行版,正式采购和支持边界应向 Atlassian 确认。
一、整体架构
组件
地址
说明
Jira
https://jira.example.com
Jira Data Center 单节点
PostgreSQL
127.0.0.1:5432
Jira 数据库
OpenLDAP
ldaps://ldap.example.com:636
用户目录
CAS
https://sso.example.com/cas
统一认证与 SAML IdP
Rocky Linux
192.168.9.40
Jira 节点
sequenceDiagram
participant U as 用户浏览器
participant J as Jira Data Center
participant C as CAS SAML IdP
participant L as OpenLDAP
U->>J: 访问 Jira
J-->>U: 重定向到 CAS SAML IdP
U->>C: 提交凭证
C->>L: LDAP Bind 验证
L-->>C: 返回 uid、mail、cn、memberOf
C-->>U: 返回 SAML Response
U->>J: POST Assertion
J->>J: 匹配 LDAP 用户
J-->>U: 建立 Jira Session
用户生命周期:
1 2 3 4 LDAP 创建和禁用用户 -> Jira LDAP Directory 同步用户与组 -> CAS SAML 登录匹配同一用户名 -> Jira Application Access、Group、Project Role 决定授权
二、资源规划 2.1 单节点建议
规模
CPU
内存
JVM Heap
数据盘
测试
4 核
8 GB
2 GB
100 GB SSD
小型生产
8 核
16 GB
4~6 GB
500 GB SSD
中型生产
16 核
32 GB
8~12 GB
1 TB SSD
Jira 性能受以下因素影响:
Issue、Project、Workflow、Custom Field 数量;
用户和用户组数量;
Lucene Index;
PostgreSQL 延迟;
LDAP 同步;
Automation;
Marketplace App;
Attachment;
JVM GC;
Dashboard 和 JQL。
不要仅按在线用户数估算。
2.2 目录规划 1 2 3 4 5 /opt/atlassian/jira-11.3.x 安装目录 /opt/atlassian/jira 当前版本软链接 /var/atlassian/application-data/jira Jira Home /var/log/jira systemd/额外日志 /backup/jira 备份目录
Jira Home 不得放在安装目录内部。
三、系统初始化 1 2 3 4 cat /etc/rocky-releaseuname -runame -m hostnamectl
1 2 3 4 hostnamectl set-hostname jira01.example.com timedatectl set-timezone Asia/Shanghai systemctl enable --now chronyd chronyc tracking
1 2 3 4 5 6 7 8 9 dnf clean all dnf makecache dnf upgrade -y dnf install -y \ vim curl wget tar gzip unzip jq \ fontconfig dejavu-sans-fonts \ bind-utils lsof policycoreutils-python-utils \ firewalld nginx java-21-openjdk-devel
1 2 java -version javac -version
Jira 11.3 不能使用 Java 8、11 或 17。
保持 SELinux:
1 2 getenforce systemctl enable --now firewalld
四、安装 PostgreSQL 17 4.1 安装 PGDG 仓库 1 2 3 4 5 6 7 8 dnf install -y \ https://download.postgresql.org/pub/repos/yum/reporpms/EL-10-x86_64/pgdg-redhat-repo-latest.noarch.rpm dnf -qy module disable postgresql dnf install -y \ postgresql17-server \ postgresql17-contrib
初始化:
1 2 /usr/pgsql-17/bin/postgresql-17-setup initdb systemctl enable --now postgresql-17
检查:
1 2 systemctl status postgresql-17 --no-pager -lsudo -u postgres psql -c 'SELECT version();'
4.2 创建 Jira 数据库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CREATE ROLE jira LOGIN PASSWORD '替换为高强度密码' NOSUPERUSER NOCREATEDB NOCREATEROLE NOREPLICATION;CREATE DATABASE jiradb WITH OWNER = jira ENCODING = 'UTF8' LC_COLLATE = 'C' LC_CTYPE = 'C' TEMPLATE = template0; \c jiradbGRANT ALL PRIVILEGES ON SCHEMA public TO jira; \q
生产环境应将数据库密码放入密码管理系统,不写入 Git 或博客脚本。
4.3 限制数据库监听 编辑:
1 vim /var/lib/pgsql/17/data/postgresql.conf
单机部署:
1 2 3 listen_addresses = '127.0.0.1' port = 5432 max_connections = 200
pg_hba.conf:
1 host jiradb jira 127.0.0.1/32 scram-sha-256
1 systemctl restart postgresql-17
测试:
1 2 psql \ 'host=127.0.0.1 port=5432 dbname=jiradb user=jira sslmode=disable'
五、安装 Jira Data Center 5.1 创建运行用户 1 2 3 4 5 6 useradd \ --system \ --create-home \ --home-dir /opt/atlassian \ --shell /bin/bash \ jira
1 2 3 4 5 6 7 8 9 mkdir -p /opt/atlassianmkdir -p /var/atlassian/application-data/jiramkdir -p /var/log/jiramkdir -p /backup/jirachown -R jira:jira \ /opt/atlassian \ /var/atlassian \ /var/log/jira
5.2 下载 Jira 从 Atlassian 官方下载页确认当前 Jira Data Center 11.3 Patch。示例:
1 2 3 4 5 6 7 export JIRA_VERSION='11.3.x' cd /tmp curl -fL \ "https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-${JIRA_VERSION} .tar.gz" \ -o "atlassian-jira-software-${JIRA_VERSION} .tar.gz"
将 11.3.x 替换为真实 Patch 版本。下载路径若变化,以官方 Download 页面为准。
解压:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 tar -xzf \ "atlassian-jira-software-${JIRA_VERSION} .tar.gz" \ -C /opt/atlassianmv \ "/opt/atlassian/atlassian-jira-software-${JIRA_VERSION} -standalone" \ "/opt/atlassian/jira-${JIRA_VERSION} " ln -sfn \ "/opt/atlassian/jira-${JIRA_VERSION} " \ /opt/atlassian/jirachown -h jira:jira /opt/atlassian/jirachown -R jira:jira "/opt/atlassian/jira-${JIRA_VERSION} "
5.3 配置 Jira Home 编辑:
1 2 vim \ /opt/atlassian/jira/atlassian-jira/WEB-INF/classes/jira-application.properties
1 jira.home = /var/atlassian/application-data/jira
5.4 JVM 配置 编辑:
1 vim /opt/atlassian/jira/bin/setenv.sh
小型生产起点:
1 2 JVM_MINIMUM_MEMORY="4096m" JVM_MAXIMUM_MEMORY="4096m"
追加:
1 2 3 4 5 6 7 8 CATALINA_PID="/var/atlassian/application-data/jira/catalina.pid" export CATALINA_PID JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} \ -XX:+UseG1GC \ -XX:+HeapDumpOnOutOfMemoryError \ -XX:HeapDumpPath=/var/atlassian/application-data/jira/heapdumps \ -Xlog:gc*,safepoint:file=/var/atlassian/application-data/jira/log/gc.log:time,uptime,level,tags:filecount=10,filesize=20M"
1 2 3 4 5 6 mkdir -p \ /var/atlassian/application-data/jira/heapdumps \ /var/atlassian/application-data/jira/logchown -R jira:jira \ /var/atlassian/application-data/jira
不要把宿主机大部分内存全部分给 Heap。Jira、Lucene、线程栈、Direct Memory、PostgreSQL 和 OS Page Cache 都需要内存。
六、配置 Nginx 反向代理 6.1 修改 Jira Tomcat Connector 编辑:
1 vim /opt/atlassian/jira/conf/server.xml
找到 HTTP Connector,配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <Connector port ="8080" address ="127.0.0.1" maxThreads ="200" minSpareThreads ="25" connectionTimeout ="20000" enableLookups ="false" maxHttpHeaderSize ="8192" protocol ="HTTP/1.1" useBodyEncodingForURI ="true" redirectPort ="8443" acceptCount ="100" disableUploadTimeout ="true" bindOnInit ="false" secure ="true" scheme ="https" proxyName ="jira.example.com" proxyPort ="443" />
Jira 只支持捆绑的 Tomcat,不要替换为系统 Tomcat。
6.2 systemd 创建 /etc/systemd/system/jira.service:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [Unit] Description =Atlassian Jira Data CenterAfter =network-on line.target postgresql-17 .serviceWants =network-on line.targetRequires =postgresql-17 .service[Service] Type =forkingUser =jiraGroup =jiraEnvironment ="JAVA_HOME=/usr/lib/jvm/java-21-openjdk" Environment ="JIRA_HOME=/var/atlassian/application-data/jira" ExecStart =/opt/atlassian/jira/bin/start-jira.shExecStop =/opt/atlassian/jira/bin/stop-jira.shPIDFile =/var/atlassian/application-data/jira/catalina.pidRestart =on -failureRestartSec =10 sTimeoutStartSec =600 TimeoutStopSec =180 LimitNOFILE =65536 TasksMax =65536 [Install] WantedBy =multi-user.target
1 2 systemctl daemon-reload systemctl enable --now jira
1 2 3 systemctl status jira --no-pager -l journalctl -u jira -n 200 --no-pager ss -lntp | grep 8080
6.3 Nginx 配置 证书:
1 2 /etc/nginx/ssl/jira.example.com.crt /etc/nginx/ssl/jira.example.com.key
创建 /etc/nginx/conf.d/jira.example.com.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 upstream jira_backend { server 127.0.0.1:8080 ; keepalive 32 ; }server { listen 80 ; server_name jira.example.com; return 301 https://$host $request_uri ; }server { listen 443 ssl; http2 on ; server_name jira.example.com; ssl_certificate /etc/nginx/ssl/jira.example.com.crt; ssl_certificate_key /etc/nginx/ssl/jira.example.com.key; ssl_protocols TLSv1.2 TLSv1.3 ; ssl_session_cache shared:JIRA_SSL:20m ; ssl_session_timeout 1d ; client_max_body_size 2g ; location = /nginx-health { access_log off ; default_type text/plain; return 200 "ok\n" ; } location / { proxy_pass http://jira_backend; proxy_http_version 1 .1 ; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-Host $host ; proxy_set_header X-Forwarded-Port 443 ; proxy_set_header Connection "" ; proxy_connect_timeout 10s ; proxy_send_timeout 300s ; proxy_read_timeout 300s ; proxy_request_buffering off ; } }
允许网络连接:
1 setsebool -P httpd_can_network_connect 1
1 2 3 nginx -t systemctl enable --now nginx systemctl reload nginx
防火墙:
1 2 3 firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
七、完成 Jira 初始化向导 访问:
1 https://jira.example.com
选择外部数据库:
1 2 3 4 5 6 7 Database Type:PostgreSQL Host:127.0.0.1 Port:5432 Database:jiradb Username:jira Password:数据库密码 Schema:public
然后:
输入 Jira Data Center License;
设置 Base URL;
创建本地管理员;
配置 SMTP;
完成索引;
验证附件和 Issue 创建。
必须保留本地管理员作为 SSO 故障回退。
八、Jira 集成 LDAP 进入:
1 2 3 4 5 Administration -> User management -> User directories -> Add directory -> LDAP
推荐目录类型:
1 Read Only, with Local Groups
含义:
用户和目录组来自 LDAP;
Jira 不修改 LDAP 用户;
Jira 可以维护本地授权组;
身份源与应用权限解耦。
8.1 基础配置
配置项
示例
Directory Type
OpenLDAP
Hostname
ldap.example.com
Port
636
Use SSL
是
Username
cn=jira-reader,ou=system,dc=example,dc=com
Password
Reader 密码
Base DN
dc=example,dc=com
8.2 User Schema
Jira 字段
LDAP 属性
User Object Class
inetOrgPerson
User Object Filter
(objectClass=inetOrgPerson)
User Name Attribute
uid
User Name RDN Attribute
uid
User First Name Attribute
givenName
User Last Name Attribute
sn
User Display Name Attribute
cn 或 displayName
User Email Attribute
mail
User Password Attribute
userPassword,但不读取哈希
User Unique ID Attribute
entryUUID
User DN:
8.3 Group Schema
Jira 字段
LDAP 属性
Group Object Class
groupOfNames
Group Object Filter
(objectClass=groupOfNames)
Group Name Attribute
cn
Group Description Attribute
description
Group Member Attribute
member
Use DN in Member Attribute
是
Group DN:
8.4 过滤允许用户 LDAP User Object Filter:
1 (&(objectClass=inetOrgPerson)(memberOf=cn=jira-users,ou=groups,dc=example,dc=com))
OpenLDAP 如果使用 memberOf,需确认 MemberOf Overlay 已启用。
8.5 同步 先设置较长周期并手工同步:
Test Settings;
Save and Test;
Synchronize;
检查用户和组;
检查 Application Access;
再配置定时同步。
不要把 LDAP 大组直接映射为 Jira 管理员。
九、配置 Jira 信任 LDAP CA Jira 运行在 Java 21,需要将企业 CA 导入 Java TrustStore,或者使用独立 TrustStore。
推荐独立 TrustStore:
1 2 3 4 5 6 7 8 9 10 11 12 mkdir -p /etc/jira JIRA_TRUSTSTORE_PASSWORD="$(openssl rand -base64 32 | tr -d '\n') " keytool \ -importcert \ -noprompt \ -alias company-root-ca \ -file company-root-ca.crt \ -keystore /etc/jira/jira-truststore.p12 \ -storetype PKCS12 \ -storepass "${JIRA_TRUSTSTORE_PASSWORD} "
1 2 chown root:jira /etc/jira/jira-truststore.p12chmod 0640 /etc/jira/jira-truststore.p12
在 /opt/atlassian/jira/bin/setenv.sh 增加:
1 2 3 4 JVM_SUPPORT_RECOMMENDED_ARGS="${JVM_SUPPORT_RECOMMENDED_ARGS} \ -Djavax.net.ssl.trustStore=/etc/jira/jira-truststore.p12 \ -Djavax.net.ssl.trustStoreType=PKCS12 \ -Djavax.net.ssl.trustStorePassword=替换为TrustStore密码"
密码应由 systemd Credential 或受限环境文件注入,不要长期明文写入脚本。
重启:
十、为什么 Jira 不直接配置 CAS Jira Data Center 原生 SSO 支持:
1 2 3 SAML 2.0 OpenID Connect Crowd Delegation
它不提供原生 CAS Protocol Client。
不推荐:
修改 web.xml 增加 CAS Filter;
替换 Jira 捆绑 Tomcat;
向 Jira Classpath 手工复制 CAS Client JAR;
使用多年无人维护的插件;
每次升级后手工重做侵入式修改。
这些做法会导致:
升级覆盖;
官方不支持;
登录链路不可预测;
安全修复困难;
集群节点不一致。
推荐:
1 2 CAS 作为 SAML IdP Jira Data Center 作为 SAML SP
十一、为 CAS 开启 SAML IdP CAS Overlay 增加:
1 2 3 dependencies { implementation "org.apereo.cas:cas-server-support-saml-idp" }
重新构建:
1 ./gradlew clean build -x test --no-daemon
配置 CAS IdP Entity ID、签名证书、Metadata 和属性释放。示例方向:
1 2 cas.authn.saml-idp.core.entity-id =https://sso.example.com/cas/idp cas.authn.saml-idp.metadata.file-system.location =file:/etc/cas/saml
CAS SAML IdP 使用 OpenLDAP 认证,并释放:
1 2 3 4 5 6 uid mail cn givenName sn memberOf
十二、在 Jira 配置 SAML SSO Jira Data Center 中进入:
1 2 3 4 Administration -> System -> Authentication methods / SSO -> Add SAML configuration
菜单名称可能随 Jira 11.3 Patch 和 SSO App 版本变化。
Jira 界面会显示:
1 2 3 SP Entity ID Assertion Consumer Service URL SP Metadata URL
将 Jira SP Metadata 注册到 CAS。
CAS SamlRegisteredService 示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 { "@class" : "org.apereo.cas.support.saml.services.SamlRegisteredService" , "serviceId" : "https://jira.example.com" , "name" : "Jira Data Center" , "id" : 40000001 , "evaluationOrder" : 10 , "metadataLocation" : "替换为Jira界面显示的SP Metadata URL" , "attributeReleasePolicy" : { "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy" , "allowedAttributes" : [ "uid" , "mail" , "cn" , "givenName" , "sn" , "memberOf" ] } }
Jira SAML 配置:
项目
建议
IdP Entity ID
CAS SAML IdP Entity ID
IdP SSO URL
CAS SAML2 SSO Endpoint
IdP Certificate
CAS SAML 签名证书
Username Mapping
uid 或稳定 NameID
Email
mail
Display Name
cn
JIT Provisioning
使用 LDAP 时建议关闭
Remember User Login
按安全策略配置
12.1 LDAP 先同步,SAML 只登录 推荐:
1 2 3 Jira LDAP Directory 负责用户和组 CAS SAML 只负责认证 关闭 SAML JIT 自动创建用户
否则可能出现 LDAP 用户和 SAML JIT 用户重复。
12.2 NameID 推荐使用:
必须满足:
唯一;
稳定;
不允许用户自行修改;
与 Jira LDAP 用户名完全一致。
12.3 回退登录 在强制 SSO 前:
保留本地 Jira 管理员;
确认当前版本的 auth_fallback 回退 URL;
将回退地址记录在密码库;
仅允许管理网访问;
演练 CAS 不可用时登录。
常见回退形式:
1 https://jira.example.com/login.jsp?auth_fallback
具体参数应以当前 Atlassian SSO 文档和 Jira 页面提示为准。
十三、CAS 直连插件备选路线 若组织明确要求使用 CAS Protocol,而不是 CAS SAML IdP,可在 Atlassian Marketplace 寻找 Data Center Approved CAS SSO App。
上线前必须确认:
支持 Jira Data Center 11.3;
支持 Java 21;
支持集群;
支持 Single Logout;
支持属性映射;
有持续维护和安全公告;
有厂商 SLA;
不修改 Jira 核心文件;
升级可回滚。
第三方插件路线不属于 Atlassian 原生 CAS 支持。
十四、权限与用户组 LDAP/CAS 只解决认证和用户来源。Jira 权限由:
1 2 3 4 5 6 7 Application Access Jira Groups Global Permissions Project Roles Permission Scheme Issue Security Scheme Workflow Conditions
控制。
推荐 LDAP 组:
1 2 3 4 jira-users jira-software-users jira-servicemanagement-users jira-auditors
不要把 LDAP jira-admins 自动映射为 Jira System Administrator,除非经过严格审批和审计。
十五、安全加固
HTTPS;
LDAP 使用 LDAPS;
SAML Assertion 签名;
NameID 稳定;
保留 Break-Glass;
禁用公共注册;
API 使用 PAT/OAuth,不使用人员密码;
管理员启用 MFA;
附件目录不可执行;
Marketplace App 最小化;
定期扫描过期管理员和应用访问。
CAS SSO 只处理 Web 登录,REST API、Automation、邮件处理和服务账号仍需要专门的 Token/账号策略。
十六、性能调优 16.1 JVM 从 4~8 GB Heap 起步,通过 GC 和负载调优:
1 2 3 4 JIRA_PID="$(cat /var/atlassian/application-data/jira/catalina.pid) " jcmd "${JIRA_PID} " GC.heap_info jcmd "${JIRA_PID} " Thread.print
监控:
Full GC;
GC Pause;
Old Gen;
Thread;
Heap Dump;
CPU;
Load。
16.2 PostgreSQL 重点:
数据库延迟;
连接池;
慢 SQL;
Autovacuum;
磁盘 I/O;
max_connections;
备份和 WAL。
不要盲目增大 Jira DB Pool。连接多不等于数据库更快。
16.3 LDAP
精确 Base DN;
用户组过滤;
索引 uid、mail、memberOf;
合理同步周期;
监控 Directory Sync;
大组和嵌套组谨慎使用。
16.4 Jira 业务治理 Jira 性能常被配置复杂度拖慢:
过多 Custom Field;
全局 Context;
大量 Workflow;
复杂 JQL;
Dashboard Gadget;
高负载 Automation;
Marketplace App;
超大 Group。
这类问题不是加 JVM Heap 就能根治。
十七、备份 必须备份:
1 2 3 4 5 6 7 8 9 10 PostgreSQL Jira Home 附件 Lucene Index(可重建但恢复更快) 安装目录自定义配置 server.xml setenv.sh 证书与 TrustStore LDAP/SAML 配置记录 License
17.1 数据库 1 2 3 4 5 6 mkdir -p /backup/jirasudo -u postgres pg_dump \ -Fc \ jiradb \ > "/backup/jira/jiradb-$(date +%F-%H%M%S) .dump"
17.2 Jira Home 维护窗口停止 Jira:
1 2 3 4 tar --xattrs --acls \ -czf "/backup/jira/jira-home-$(date +%F-%H%M%S) .tar.gz" \ -C /var/atlassian/application-data \ jira
配置:
1 2 3 4 5 6 7 tar --xattrs --acls \ -czf "/backup/jira/jira-config-$(date +%F-%H%M%S) .tar.gz" \ /opt/atlassian/jira/conf/server.xml \ /opt/atlassian/jira/bin/setenv.sh \ /etc/systemd/system/jira.service \ /etc/nginx/conf.d/jira.example.com.conf \ /etc/jira
十八、升级 升级前:
阅读 Jira 11.x Upgrade Notes;
验证 Java、PostgreSQL 和 App 兼容;
备份数据库、Home 和配置;
在测试环境恢复生产备份;
验证 LDAP/SAML;
准备旧版本软链接回滚。
新版本解压到新目录:
1 2 /opt/atlassian/jira-11.3.a /opt/atlassian/jira-11.3.b
不要覆盖旧安装目录。迁移配置时不要直接复制整个旧 web.xml 或全部 Tomcat 配置,应按官方 Upgrade Guide 合并必要修改。
升级后验证:
1 2 3 4 5 6 7 8 9 10 本地管理员 LDAP 登录/同步 CAS SAML 登录 Issue 创建 附件 搜索和索引 Automation 邮件 Marketplace App REST API
十九、常见故障 19.1 Jira 启动失败 1 2 3 4 5 systemctl status jira -l journalctl -u jira -n 300 --no-pagertail -f \ /var/atlassian/application-data/jira/log/atlassian-jira.log
检查 Java 21、Home 权限、数据库、PID、端口和 License。
19.2 LDAP SSL 错误 1 2 3 4 openssl s_client \ -connect ldap.example.com:636 \ -servername ldap.example.com \ -showcerts
1 2 3 keytool -list \ -keystore /etc/jira/jira-truststore.p12 \ -storetype PKCS12
检查 SAN、CA、TrustStore 密码和系统时间。
19.3 LDAP 用户存在但 Jira 搜不到 检查:
User DN;
Group DN;
Object Class;
uid;
Filter;
MemberOf Overlay;
Reader ACL;
Directory 顺序。
19.4 SAML 登录后用户不存在 原因通常是:
LDAP 尚未同步;
NameID 与 uid 不一致;
JIT 关闭但用户不存在;
Directory 不可用;
用户没有 Application Access;
用户被禁用。
19.5 SAML 登录循环 检查:
1 2 3 4 5 6 7 8 9 Jira Base URL Nginx Forwarded Header Tomcat proxyName/proxyPort/scheme CAS Entity ID ACS Audience Recipient Cookie 时间同步
19.6 用户登录成功但没有项目权限 SSO 成功不等于授权成功。检查:
1 2 3 4 5 Application Access Group Project Role Permission Scheme Issue Security
19.7 修改 server.xml 后升级丢失 Jira 安装目录是版本目录,升级不会自动合并手工修改。必须通过配置清单和差异工具迁移,而不是依赖记忆。
二十、生产检查清单
二十一、总结 推荐链路:
1 2 3 OpenLDAP:身份和用户组 CAS:LDAP 认证 + SAML IdP Jira Data Center:LDAP Directory + SAML SP
核心原则:
Jira 原生支持 LDAP,但不原生支持 CAS Protocol;
使用 CAS SAML IdP 对接 Jira Data Center 原生 SSO;
LDAP 负责用户生命周期,SAML 负责登录;
关闭或谨慎使用 SAML JIT,避免重复用户;
NameID 必须与 LDAP 用户名稳定一致;
SSO 只解决认证,Jira 权限仍由 Application Access、Group、Role 和 Scheme 控制;
保留本地回退管理员并演练故障登录;
升级必须同时验证 Java、数据库、LDAP、SAML 和 Marketplace App。
把 CAS 接入 Jira 的正确做法,不是在 Tomcat 里塞一个过滤器“能跳转就算成功”,而是利用 Jira 官方 SAML 边界,把身份、登录和应用权限分层管理。
参考资料