반응형
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>

 

 

반응형
반응형

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적용하는 방법을 적어봐야지

2022.04.07 - [개발/리눅스] - openssl 적용한 후 haproxy적용하는 방법

반응형
반응형

나는 소라고 생각해

 

 

 

 

반응형
반응형
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   |
+-----------------+-------+

 

해당 처리 후 해당오류가 사라졌음을 확인했다.

 


참고
  • max_connections - 최대 동시 접속 가능 수 기본값=100
  • wait_timeout - 종료전까지 요청이 없이 기다리는 시간
  • Aborted_connects : MySQL 서버에 접속이 실패된 수
  • Max_used_connections : 최대로 동시에 접속한 수
  • Threads_connected : 현재 연결된 Thread 수

https://m.blog.naver.com/fromyongsik/40158255209

반응형
반응형

 

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 관련 링크

https://www.cve.org/CVERecord?id=CVE-2021-4104

반응형
반응형

몇일전 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

 

반응형
반응형

서버 로그에 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/

 

Java Platform SE 8

 

docs.oracle.com

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

 

 

반응형

+ Recent posts