DB명 innodb
table명 test
ALTER DATABASE innodb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE test CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
insert into test(content) values ('😁😂😃😄😅😆💩');
DB명 innodb
table명 test
ALTER DATABASE innodb CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE test CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
insert into test(content) values ('😁😂😃😄😅😆💩');
1.2.17에서 2.17.1 버전으로 변경중인데
이번에도 역시 오류가 남
org.apache.commons.logging.LogConfigurationException: User-specified log class 'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not useable. at org.apache.commons.logging.impl.LogFactoryImpl.discoverLogImplementat
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.17.1</version>
</dependency>
Unexpected number in JSON at position 숫자 : 오류원인 및 해결방법 (0) | 2022.09.30 |
---|---|
javascript 현재날짜와 기준날짜 비교하여 다운로드 하기 (0) | 2022.02.19 |
HAProxy 정의/구성/동작 (0) | 2021.10.26 |
html 체크박스 readonly 방법 / 체크박스 체크 디폴트 해제 막기 (0) | 2021.04.14 |
엑셀 파일다운로드시 0 제거되는현상 (0) | 2021.03.19 |
ssl_1 은 내가 하고싶은 이름이므로, 사용하고싶은 명칭을 쓰면 됨
[user@localhost ~]$ openssl genrsa -des3 -out ssl_1.key 2048
Generating RSA private key, 2048 bit long modulus
..........+++
...........................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for ssl_1.key:
# 비밀번호입력
Verifying - Enter pass phrase for ssl_1.key:
# 비밀번호 재입력
[user@localhost ~]$ openssl req -new -key ssl_1.key -out ssl_1.csr
Enter pass phrase for ssl_1.key:
# 위에서 비밀번호입력한 비밀번호 입력
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:KR
State or Province Name (full name) []:Seoul
Locality Name (eg, city) [Default City]:GangNam
Organization Name (eg, company) [Default Company Ltd]:회사명
Organizational Unit Name (eg, section) []:제품명
Common Name (eg, your name or your server's hostname) []:사설아이피입력
Email Address []:이메일주소
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:비밀번호
An optional company name []:
[user@localhost ~]$ openssl rsa -in ssl_1.key -out ssl_1_nopass.key
Enter pass phrase for ssl_1.key:
writing RSA key
[user@localhost ~]$ openssl x509 -req -days 365 -in ssl_1.csr -signkey ssl_1_nopass.key -out ssl_1.crt
Signature ok
subject=/C=KR/ST=Seoul/L=GangNam/O=회사명/OU=제품명/CN=사설아이피/emailAddress=이메일주소
Getting Private key
[user@localhost ssl]$ openssl pkcs12 -export -in ssl_1.crt -inkey ssl_1.key -out ssl_1.p12 -name tomcat
Enter Export Password:
Verifying - Enter Export Password:
-- ========================
[user@localhost ssl]$ ll
-rw-rw-r--. 1 user user 1326 1월 11 11:18 ssl_1.crt
-rw-rw-r--. 1 user user 1102 1월 11 11:06 ssl_1.csr
-rw-rw-r--. 1 user user 1743 1월 11 10:53 ssl_1.key
-rw-rw-r--. 1 user user 1675 1월 11 11:18 ssl_1_nopass.key
-rw-rw-r--. 1 user user 2594 1월 11 12:16 ssl_1_nopass.p12
[user@localhost ssl]$
위에서부터 순서대로 하면 된다.
근데 이건 openssl이라 톰캣 실제 운영할떄 구매해서 사용하는 ssl이랑 설정이 조금 다르다
우선 톰캣 server.xml 변경할 것 (설치한 ssl을 443포트로 사용할 것이라는 가정하에)
<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"
port="443" SSLEnabled="true" maxThreads="200"
scheme="https" secure="true"
keystoreFile="p12 경로"
keystorePass="p12 비밀번호"
keystoreType="pkcs12"
clientAuth="false"
sslProtocol="TLS" />
그다음 톰캣 conf 디렉토리 하위에 web.xml에 다음 코드를 추가한다.
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL Forward</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
톰캣 재기동 후 설치확인한다.
openssl s_client -host 사설아이피 -port 443 -tls1_2
설치확인이 됬는데 https가 안떠서 확인해보니 포트사용중이긴하나 방화벽에서 허용된 포트가 아니라 안뜨는거엿음.
아래443포트추가후 완료
$ 443포트 추가
firewall-cmd --permanent --zone=public --add-port=443/tcp
# 반드시 재시작 필요
firewall-cmd --reload
다음 포스팅에선 openssl 적용한 후 haproxy적용하는 방법을 적어봐야지
pem파일로 ssl인증서 만료일 등 정보 확인 (0) | 2022.02.25 |
---|---|
CVE-2021-4034 리눅스 취약점 임시조치 (0) | 2022.02.25 |
CVE-2021-4104 취약점 해당 여부 확인하기 JMSAppeder (0) | 2021.12.17 |
취약점 이슈 log4j 버전확인 명령어 정리 (0) | 2021.12.14 |
NoRouteToHostException 호스트로 갈 루트가 없음 해결 (0) | 2021.11.25 |
나는 소라고 생각해
Caused by: java.sql.SQLException: Too many connections
해당 오류는 mysql에 연결된 클라이언트의 수가 일정수치 이상인 경우 나타난다.
확인방법
# mysql 접속
> mysql -u 계정 -p
> 비밀번호입력
# 현재 최대 동시 접속 가능 커넥션 수 확인
> show variables like 'max_connections';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| max_connections | 151 |
+-----------------------+-------+
3 rows in set (0.174 sec)
# 현재 커넥션 관련 정보 확인
> show status like '%CONNECT%';
+-----------------------------------------------+-------+
| Variable_name | Value |
+-----------------------------------------------+-------+
| Aborted_connects | 563 |
| Aborted_connects_preauth | 0 |
| Connection_errors_accept | 0 |
| Connection_errors_internal | 563 |
| Connection_errors_max_connections | 563 |
| Connection_errors_peer_address | 0 |
| Connection_errors_select | 0 |
| Connection_errors_tcpwrap | 0 |
| Connections | 998 |
| Max_used_connections | 152 |
| Performance_schema_session_connect_attrs_lost | 0 |
| Slave_connections | 0 |
| Slaves_connected | 0 |
| Ssl_client_connects | 0 |
| Ssl_connect_renegotiates | 0 |
| Ssl_finished_connects | 0 |
| Threads_connected | 145 |
| wsrep_connected | OFF |
+-----------------------------------------------+-------+
# Max_used_connections은 최대로 동시에 접속한 수를 의미한다.
# 그러나 맨 처음에 조회한 정보를 보면 최대 동시접속 가능 수는 max_connections=151로 되어있음
# 500으로 늘려봤다.
> set global max_connections=500;
# (타임아웃도 늘림)
> set wait_timeout=60;
# 재시작
> systemctl restart mysql
# 연결수 변경 확인
> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 500 |
+-----------------+-------+
해당 처리 후 해당오류가 사라졌음을 확인했다.
참고
find ./ -name 'log4j.proper*'
log4j.propertise파일을 찾는다
결과는
./***-apache-tomcat-8.0.45/webapps/***/WEB-INF/classes/log4j.properties
이런식으로 나오게 되면 해당 log4j.propertise 파일을 확인한다.
vi ./***-apache-tomcat-8.0.45/webapps/***/WEB-INF/classes/log4j.properties
vi 편집기로 해당 파일을 확인한다.
log4j.rootCategory=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n log4j.category.org.springframework.beans.factory=DEBUG
ConsoleAppender을 사용하고 있어 CVE-2021-4104이슈(JMSAppeder사용하는 경우 이슈) 해당없음 확인함.
CVE-2021-4104 관련 링크
CVE-2021-4034 리눅스 취약점 임시조치 (0) | 2022.02.25 |
---|---|
리눅스 사설아이피 openssl 설치 (0) | 2022.01.25 |
취약점 이슈 log4j 버전확인 명령어 정리 (0) | 2021.12.14 |
NoRouteToHostException 호스트로 갈 루트가 없음 해결 (0) | 2021.11.25 |
tomcat http에서 https로 리다이렉트 설정 (0) | 2021.11.19 |
몇일전 log4j 관련해서 취약점이 이슈가 되면서 해당 취약점에 대해 알아보게 되었다.
우선 이슈가 되고있는 해당 취약점은 log4j의 버전이 2.x.x부터 2.15.0 미만인 경우에 해당한다고해서
만약 이 구간에 해당한다면 권고 버전인 2.15.0으로 log4j를 업데이트 진행해야한다. (단, java8버전이 필요)
java7버전의 마지막 지원되는 버전이 2.12.1이라고한다.
그래서 프로젝트들의 log4j 버전을 먼저 확인하게 되었다.
우리는 메이븐을 사용하고 있고 pom.xml을 뒤져봐도 되지만
귀찮기도하고 한눈에 보기위해 간단하게 명령어를 쳐서 log4j jar 경로를 확인했다.
find ./ -name 'log4j*.jar'
해당 명령어를 치게 되면, 내가 있는 위치 기준으로 관련파일들을 찾게 되고
아래와 같은 형태로 나온다.
./apache-tomcat-8.0.32/webapps/hyperic-sigar-1.6.4/sigar-bin/lib/log4j.jar
./apache-tomcat-8.0.32/webapps/WEB-INF/lib/log4j-1.2.17.jar
find 명령어가 아닌 다른방법으로는 log4j jar 파일경로를 새 파일에 저장하는 방법
find / -name “log4j-1.*.jar” > RESULT_log4j.txt; find / -name “log4j-core-2.*.jar” >> RESULT_log4j.txt
cat RESULT_log4j.txt
jar의 버전을 보면 log4j는 1.2.17으로 관련 취약점에 해당사항 없음으로 확인하였다. (pom.xml도 참고)
버전이 낮은 버전이라 추후 권고버전으로 업데이트가 필요할 듯 하다.
또 다른 이슈로 JMS Appender 사용 여부를 확인하는 방법은
jar -tf ./apache-tomcat-8.0.45/webapps/WEB-INF/lib/log4j-1.2.17.jar | grep JMSAppender
리눅스 사설아이피 openssl 설치 (0) | 2022.01.25 |
---|---|
CVE-2021-4104 취약점 해당 여부 확인하기 JMSAppeder (0) | 2021.12.17 |
NoRouteToHostException 호스트로 갈 루트가 없음 해결 (0) | 2021.11.25 |
tomcat http에서 https로 리다이렉트 설정 (0) | 2021.11.19 |
tomcat 로그 설정 - catalina.out 파일 생성하기 (0) | 2021.11.02 |
서버 로그에 java.net.NoRouteToHostException: 호스트로 갈 루트가 없음
라는 오류가 찍힘.
혹시 접속정보가 잘못 됬나 싶었는데 그것도 아님. 로그인 결과도 성공임 (loginCheck이 true)
FTPClient ftpClient = new FTPClient();
ftpClient.connect(String hostname, int port);
Boolean loginCheck = ftpClient.login(String username, String password)
많은 삽질끝에 어이없게 방화벽 문제였다.
https://docs.oracle.com/javase/8/docs/api/
api를 뒤져보니
public class NoRouteToHostException
extends SocketException
Signals that an error occurred while attempting to connect a socket to a remote address and port. Typically, the remote host cannot be reached because of an intervening firewall, or if an intermediate router is down.
번역 : 소켓을 원격 주소 및 포트에 연결하는 동안 오류가 발생했음을 알립니다. 일반적으로 간섭하는 방화벽 때문에 또는 중간 라우터가 다운된 경우 원격 호스트에 연결할 수 없습니다.
방화벽 상태를 보니 켜져있다(최근에 이 서버 재기동하면서 방화벽이 자동으로 켜진듯)
# systemctl status firewalld
방화벽을 stop하고, 재부팅해도 활성화 되지 않도록 설정함.
# systemctl stop firewalld
# systemctl mask firewalld
CVE-2021-4104 취약점 해당 여부 확인하기 JMSAppeder (0) | 2021.12.17 |
---|---|
취약점 이슈 log4j 버전확인 명령어 정리 (0) | 2021.12.14 |
tomcat http에서 https로 리다이렉트 설정 (0) | 2021.11.19 |
tomcat 로그 설정 - catalina.out 파일 생성하기 (0) | 2021.11.02 |
리눅스 mysql 접속 및 쿼리실행 방법 (0) | 2021.10.13 |